2

CakePHP でアプリケーションを構築しており、Zend Framework 2 を使用したいと考えていました。特に使用したい 2 つの構成要素は、captcha と lucene です (別々に維持されていることはわかっています)。

app/vendor に ZF2 ライブラリ フォルダーを追加しました。

いろいろなサイトで見つけた2つの方法を使ってZendのクラスを使ってみました。

方法 1

コントローラーに行を追加しました メソッド

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 つのコードのいずれかに関するヘルプ、または最新のドキュメント/ブログへのポインタを歓迎します。

4

1 に答える 1