CakePHP でアプリケーションを構築しており、Zend Framework 2 を使用したいと考えていました。特に使用したい 2 つの構成要素は、captcha と lucene です (別々に維持されていることはわかっています)。
app/vendor に ZF2 ライブラリ フォルダーを追加しました。
いろいろなサイトで見つけた2つの方法を使ってZendのクラスを使ってみました。
コントローラーに行を追加しました メソッド
App::import('Vendor', 'Zend_Captcha_Figlet', true, false, 'Zend/Captcha/Figlet.php');
次のようなエラーが発生しました
Error: Class 'Zend\Captcha\AbstractWord' not found
不足しているすべてのクラスを追加します。
App::import('Vendor', 'Zend_Captcha', true, false, 'Zend/Captcha.php');
App::import('Vendor', 'Zend_Validator_ValidatorInterface', true, false, 'Zend/Validator/ValidatorInterface.php');
App::import('Vendor', 'Zend_Validator_Translator_TranslatorAwareInterface', true, false, 'Zend/Validator/Translator/TranslatorAwareInterface.php');
App::import('Vendor', 'Zend_Validator_AbstractValidator', true, false, 'Zend/Validator/AbstractValidator.php');
App::import('Vendor', 'Zend_Stdlib_ArrayObject_PhpReferenceCompatibility', true, false, 'Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php');
if (version_compare(PHP_VERSION, '5.3.4', 'lt')) {
class_alias('Zend/Stdlib/ArrayObject/PhpLegacyCompatibility', 'Zend/Stdlib/AbstractArrayObject');
} else {
class_alias('Zend_Stdlib_ArrayObject_PhpReferenceCompatibility', 'Zend/Stdlib/AbstractArrayObject');
}
App::import('Vendor', 'Zend\Stdlib\ArrayObject\PhpLegacyCompatibility', true, false, 'Zend/Stdlib/ArrayObject/PhpLegacyCompatibility.php');
App::import('Vendor', 'Zend_Stdlib_AbstractArrayObject',true,false,'Zend/Stdlib/AbstractArrayObject.php');
App::import('Vendor', 'Zend_Stdlib_ArrayObject', true, false, 'Zend/Stdlib/ArrayObject.php');
App::import('Vendor', 'Zend\Session\Container\PhpLegacyCompatibility', true, false, 'Zend/Session/Container/PhpLegacyCompatibility.php');
if (version_compare(PHP_VERSION, '5.3.4', 'lt')) {
class_alias('Zend\Session\AbstractContainer', 'Zend\Session\AbstractBaseContainer');
} else {
class_alias('Zend\Session\Container\PhpReferenceCompatibility', 'Zend\Session\AbstractBaseContainer');
}
App::import('Vendor', 'Zend_Session_Container', true, false, 'Zend/Session/Container.php');
App::import('Vendor', 'Zend_Captcha_Exception_ExceptionInterface', true, false, 'Zend/Captcha/Exception/ExceptionInterface.php');
App::import('Vendor', 'Zend_Captcha_Exception_InvalidArgumentException', true, false, 'Zend/Captcha/Exception/InvalidArgumentException.php');
App::import('Vendor', 'Zend_Captcha_AdapterInterface', true, false, 'Zend/Captcha/AdapterInterface.php');
App::import('Vendor', 'Zend_Captcha_AbstractAdapter', true, false, 'Zend/Captcha/AbstractAdapter.php');
App::import('Vendor', 'Zend_Captcha_AbstractWord', true, false, 'Zend/Captcha/AbstractWord.php');
App::import('Vendor', 'Zend_Text_Figlet_Figlet', true, false,'Zend/Text/Figlet/Figlet.php');
App::import('Vendor', 'Zend_Math_Rand', true, false, 'Zend/Math/Rand.php');
App::import('Vendor', 'Zend_Captcha_Figlet', true, false, 'Zend/Captcha/Figlet.php');
..ここで立ち往生するまで:
Class 'Zend/Stdlib/ArrayObject/PhpReferenceCompatibility' not found
行のエラーclass_alias('Zend_Stdlib_ArrayObject_PhpReferenceCompatibility', 'Zend/Stdlib/AbstractArrayObject');
この ' 'class_alias('Zend_Stdlib_ArrayObject_PhpReferenceCompatibility', 'Zend/Stdlib/AbstractArrayObject');
を解決するために使用される場所 Error: Class 'Zend\Session\AbstractBaseContainer' not found
方法 2 - リンクが見つかりませんでした
コンポーネントを作成してメソッドを追加する
public function initialize(){
$include = get_include_path();
$include.= PATH_SEPARATOR. APP . 'vendors' . DS;
$successful = set_include_path($include);
if (!$successful) {
throw new Exception('ZendComponent failed to set include path.', E_ERROR);
}
App::import('Vendor', 'Loader',true,false,'Zend/Loader.php');
}
public function loadClass($class, $dirs = null){
Zend_Loader::loadClass($class, $dirs);
}
コントローラーメソッドで $this->Zend->loadClass('Captcha'); を呼び出します。
コンポーネントを宣言した後。
しかし、エラーを出して終了します:Error: Class 'Zend_Loader' not found
2 つのコードのいずれかに関するヘルプ、または最新のドキュメント/ブログへのポインタを歓迎します。