HTMLpurifier を Zend Framework と組み合わせて使用したいと考えています。クラスとそのファイルを 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 からこのクラスをファイルロードできます。
クラスがこの命名規則に従っている場合、同じオートローダーを使用して自動的にロードできます。それ以外の場合は、独自のオートローダーを定義する必要があります。オートローダー クラスを書く winch は 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';
醜いですが、それは働いています。