使用Laravel 7的HTML Purifier(ezyang / htmlpurifier)或专门使用(stevebauman / purify)(由前者提供支持),是否可以使用替代文件系统的缓存?
docs表示您可以使用FS,或者为null(不建议使用),但是FS只是一个实现。其他实现方式是否可行(理想情况下是Redis),以及如何配置它们?
当前有no official caches in the HTML Purifier library other than "Serializer"。也就是说,您可以编写自己的HTMLPurifier_DefinitionCache
扩展名。
为了能够加载自定义缓存,您必须使用register来实现DefinitionCacheFactory
。据我了解,这应该工作:
...
$factory = HTMLPurifier_DefinitionCacheFactory::instance();
$factory->register('YourImplName', 'YourFullClassName');
$config->set('Cache.DefinitionImpl', 'YourImplName');
...
您可以看到需要在DefinitionCache.php
中实现哪些方法,需要对其进行扩展(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)
。
我希望有帮助!