0

ZFは私を痩せさせています。最初にこれを使用してリソースとして追加しないと、AutoLoader の 1 つのインスタンスを動作させることができません

require_once ('Zend\Loader\Autoloader.php');
Zend_Loader_Autoloader::getInstance();

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
           'basePath'  => APPLICATION_PATH . '/helpers',
           'namespace' => 'Application_',
       ));

$resourceLoader->addResourceType('form', 'forms/', 'Form')
           ->addResourceType('functions', 'functions/', 'Functions')
           ->addResourceType('menus', 'menus/', 'Menu')
           ->addResourceType('acls', 'acls/', 'Acls');

今、プラグインをロードしようとしていますが、ファイルが存在することがわかっているのに、ZF がパスについて文句を言います。

// located in application/controllers/plugins
    require('controllers\plugins\Acl.php');
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Application_Controller_Plugin_Acl($acl));

require を使用する必要があるのはなぜですか? これは IIS7 のものですか? AutoLoader がすべてを処理するはずだと思っていました。

4

1 に答える 1

2

これは IIS の問題ではないと思います。の不適切な使い方だと思いますZend_Loader_Autoloader_Resource

Zend_Loader_Autoloader_Resource名前空間を追加し、Applicationそれが basePath にあることを介してオートローダーに伝えていますAPPLICATION_PATH . '/helpers'

これから試してみると:

new Application_Menu_Primary();

ZF は でそれを見つけるはずAPPLICATION_PATH . '/helpers/menus/Primary.php'です。それは本当にファイルを見つけたい場所ですか?私はそうではないと推測しています。さらに、これを試してみてください:Application_Controller_Plugin_AclリソースタイプController_Pluginとその内部のディレクトリが見つからないため、含まれることはありませんAPPLICATION_PATH . '/helpers'(私はあなたがそれを望んでいるとは思いません)。

Zend_Loader_Autoloader_Resourceこの使用法をまとめて削除し、名前空間をアプリケーションの/libraryディレクトリに追加して、次のディレクトリ構造を作成することをお勧めします。

/library/Application/Controller/Plugin/Acl.php
/library/Application/Form/
...etc

/library次に、 index.php を介して PHP の include_path にパスを追加する必要があります。(これがスタンダードだと思っていた)

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

Application最後に、名前空間をに追加しますapplication.ini

autoloaderNamespaces.app = 'Application'

それはあなたの問題を解決するはずです。このクラスの目的についてもっと学ぶことをお勧めしますZend_Loader_Autoloader_Resource

于 2011-07-21T20:59:26.790 に答える