4

会社用のカスタムライブラリを備えたZendFrameworkアプリケーションがあります。カスタムライブラリで作成したリソースは、開発環境のWindowsで問題なく読み込まれます。今朝、これをLinuxボックスに移動しようとしましたが、次のエラーが発生します。

Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "errorLogger" not found' in /home/nick/Repos/myfirstzend.com/includes/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 694

プラグインパスをブートストラップのコンストラクターに次のように設定しています。

$this->setOptions(array(
            'pluginPaths' => array('Company_Application_Resource' => 'Company/Application/Resource')
));

次に、次の配列を渡そうとします(ブートストラップ内の別の_initメソッドで)。

$resources['errorLogger'] = array(
                'stream' => array(
                    'writerName' => 'db',
                    'writerParams' => array(
                        'db' => array(
                            'dbname' => APPLICATION_PATH . '/logs/errorLog.sqlite'
                        )
                    )
                )
            );

次の方法に:

$this->registerPluginResource($resourceName, $resourceOptions);

$resourceNameその初期配列('errorLogger')のキーはどこにあり、はそのキーの$resourceOptions配列です。

私はErrorLogger.phplibrary/Company/Application/Resource/にあり、クラス名はclass Company_Application_Resource_ErrorLogger extends Zend_Application_Resource_Logです。

私は途方に暮れています。誰かが私が間違っているのを見ますか?

これを理解するために私ができる一連のvar_dumpsはありますか?私はここで途方に暮れています。

編集:ブートストラップコード

4

2 に答える 2

0

Xdebugと、インタラクティブにデバッグできるもの(Eclipse PDTなど)を使用して、問題のある領域をステップスルーしてみてください。これにより、問題が発生している理由がわかります。

すべてのライブラリコードをダンプすることを除けば、これが私が思いつく唯一の答えのようです。

また、リソースの名前を変更してみます。私が思い出すと、Zendはその名前のリソースに問題があります。

于 2012-10-18T00:42:41.773 に答える
-1

正しいパスを使用しましたか?APPLICATION_PATH変数を使用して絶対パスビルドを使用する必要があると思います。../がAPPLICATION_PATHに関連するパスに含まれている場合は、realpath関数を使用します

さらに、オートローダーに関して使用するコードをいくつか紹介します。おそらくそれが役立つでしょう。

    /**
 * Register namespace App_
 * @return Zend_Application_Module_Autoloader
 */
protected function _initAutoload() {
    $autoloader = new Zend_Application_Module_Autoloader ( array ('namespace' => 'App_', 'basePath' => APPLICATION_PATH ) );
    return $autoloader;
}

ライブラリがデフォルト以外のインクルードパスにある場合は、以下に示すように、application.iniと名前空間にカスタムライブラリインクルードパスを追加できます。

includePaths.library = APPLICATION_PATH "/../../www_company_library"
autoloaderNamespaces[] = 'Company';
于 2012-10-16T22:27:03.007 に答える