Можно ли использовать Redis или альтернативный кеш с HTMLPurifier? - PullRequest
0 голосов
/ 08 апреля 2020

Используя HTML Очиститель (ezyang / htmlpurifier) ​​или специально (stevebauman /rify) для Laravel 7 (работает на первом), возможно ли использовать альтернативный кэш, чем файловая система?

документы подразумевают, что вы можете использовать FS или null (не рекомендуется), но также и то, что FS является просто реализацией. Возможны ли другие реализации (в идеале Redis) и как они будут настроены?

1 Ответ

2 голосов
/ 09 апреля 2020

В настоящее время в библиотеке HTML Purifier нет официальных кэшей, кроме "Serializer" . Тем не менее, вы можете написать свое собственное расширение HTMLPurifier_DefinitionCache.

Чтобы иметь возможность загрузить свой пользовательский кеш, вам нужно будет зарегистрировать вашу реализацию с DefinitionCacheFactory. Насколько я понимаю, это должно работать:

...
$factory = HTMLPurifier_DefinitionCacheFactory::instance();
$factory->register('YourImplName', 'YourFullClassName');
$config->set('Cache.DefinitionImpl', 'YourImplName');
...

Вы можете увидеть, какие методы вам нужно реализовать в DefinitionCache.php, которые вам нужно будет расширить (class YourFullClassName extends HTMLPurifier_DefinitionCache ). В духе того, чтобы не оставлять большинство ответов доступными только по ссылке, вот абстрактные методы класса, которые вам определенно необходимо реализовать:

    /**
     * Adds a definition object to the cache
     * @param HTMLPurifier_Definition $def
     * @param HTMLPurifier_Config $config
     */
    abstract public function add($def, $config);

    /**
     * Unconditionally saves a definition object to the cache
     * @param HTMLPurifier_Definition $def
     * @param HTMLPurifier_Config $config
     */
    abstract public function set($def, $config);

    /**
     * Replace an object in the cache
     * @param HTMLPurifier_Definition $def
     * @param HTMLPurifier_Config $config
     */
    abstract public function replace($def, $config);

    /**
     * Retrieves a definition object from the cache
     * @param HTMLPurifier_Config $config
     */
    abstract public function get($config);

    /**
     * Removes a definition object to the cache
     * @param HTMLPurifier_Config $config
     */
    abstract public function remove($config);

    /**
     * Clears all objects from cache
     * @param HTMLPurifier_Config $config
     */
    abstract public function flush($config);

    /**
     * Clears all expired (older version or revision) objects from cache
     * @note Be careful implementing this method as flush. Flush must
     *       not interfere with other Definition types, and cleanup()
     *       should not be repeatedly called by userland code.
     * @param HTMLPurifier_Config $config
     */
    abstract public function cleanup($config);

В этом классе есть и другие методы, которые вы можно переопределить, если вы обнаружите необходимость переопределить их, например, generateKey($config) или isOld($key, $config).

Надеюсь, это поможет!

...