我想将 HTMLpurifier 与 Zend 框架结合使用。我很想用 Zend_Loader 加载类及其文件。你将如何包括它?您会只使用 HTMLPurifier.auto.php 还是您知道更好的方法?
4 回答
我在 Zend Framework 项目中使用 HTML Purifier 作为过滤器。这是我的课程的修改版本:
require_once 'HTMLPurifier.includes.php';
require_once 'HTMLPurifier.autoload.php';
class My_Filter_HtmlPurifier implements Zend_Filter_Interface
{
protected $_htmlPurifier = null;
public function __construct($options = null)
{
// set up configuration
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.DefinitionID', 'My Filter');
$config->set('HTML.DefinitionRev', 1); // increment when configuration changes
// $config->set('Cache.DefinitionImpl', null); // comment out after finalizing the config
// Doctype
$config->set('HTML.Doctype', 'XHTML 1.0 Transitional');
// configure caching
$cachePath = APPLICATION_PATH . '/../cache/htmlpurifier';
if (!is_dir($cachePath)) {
mkdir($cachePath, 0755, true);
}
$cachePath = realpath($cachePath);
$config->set('Cache.SerializerPath', $cachePath);
if (!is_null($options)) {
//$config = HTMLPurifier_Config::createDefault();
foreach ($options as $option) {
$config->set($option[0], $option[1], $option[2]);
}
}
$this->_htmlPurifier = new HTMLPurifier($config);
}
public function filter($value)
{
return $this->_htmlPurifier->purify($value);
}
}
除非我误解了这个问题(或 HTMLpurifier)。如果你有 Zend_Loader 运行并且它被设置为自动加载。
require_once('Zend/Loader.php');
Zend_Loader::registerAutoload();
或者类似的东西。将 HTMLpurifier 类放在您的库目录中。我只是不确定它的实际类名。
您可以将类文件放在库目录中并按其名称调用它,或者将其扔进杂项包中。
例子
// SITE/library/Zend/Auth.php
class Zend_Auth
{
}
// SITE/library/htmlpurifier.php
class htmlpurifier
{
}
// SITE/library/misc/htmlpurifier.php
class Misc_HTMLpurifier
{
}
说得通?
您可以使用 Zend_Loader 类注册一个自动加载器类。当您不带任何参数调用 registerAutoLoad() 方法时,您实际上是将 Zend_Loader 本身注册为自动加载器。所以:
Zend_Loader::registerAutoLoad();
// 等于: Zend_Loader::registerAutoLoad('Zend_Loader'),true);
Zend_Loader 尝试使用 Zend Framework 的命名约定加载类,如下所示:
- 每个类都在单独的文件中定义
- 每个类名都以大写字母开头
- 类名中的下划线,表示目录级别。
所以如果'Zend_Loader'是一个类的名字,它在你的路径'Zend'目录下的'Loader.php'文件中定义。对你来说 PHP 可以从文件 Zend/Loader.php 文件加载这个类
如果您的类遵循此命名约定,则可以使用相同的自动加载器自动加载它们。否则,您需要定义自己的自动加载器。编写一个自动加载器类绞盘可以扩展 Zend_Loader,并定义加载功能,以便它将加载具有其他命名约定的类。然后用 Zend_Loader 注册你自己的自动加载器。像这样:
Zend_Loader::registerAutoLoad('myLoader',true);
我已将 HTMLPurifier 存档库的内容放在我的库路径中。所以我有这个目录结构:
library/
HTMLPurifier\
HTMLPurifier.auto.php
...
HTMLPurifier.safe-includes.php
然后我把它放在我使用 HTMLPurifier 的文件的顶部:
require_once 'HTMLPurifier.safe-includes.php';
丑陋,但它的工作。