0
        Warning: include_once(Application/Model/Hiring.php): failed to open stream: 
No such file or directory in /var/www/hiring/library/Zend/Loader.php on line 146

包含パスで

Warning: include_once(): Failed opening 'Application/Model/Hiring.php' for inclusion 
(include_path='/var/www/hiring/application/../library:/var/www/hiring/library:./application
/models/:./application/controllers/:./application/views/scripts/:.:/usr/share/php:/usr/local
/ZendFramework/library') in /var/www/hiring/library/Zend/Loader.php on line 146

そして私のインデックスファイルは

<?php

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));

// define root path
defined('ROOT_PATH') || define('ROOT_PATH', realpath(dirname(__FILE__) . '/'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));



// Ensure library/ is on include_path
set_include_path(realpath(dirname(__FILE__) . '/library')
. PATH_SEPARATOR . './application/models/'
. PATH_SEPARATOR . './application/controllers/'
. PATH_SEPARATOR . './application/views/scripts/'
. PATH_SEPARATOR . get_include_path());

require_once 'Zend/Application.php';
require_once 'Zend/Loader/Autoloader.php';
/** Zend_Application */


$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('hiring');
$loader->setFallbackAutoloader(true);

Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Config_Ini');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table');
Zend_Loader::loadClass('Zend_Db_Statement');
//Zend_Loader::loadClass('Zend_Mail_Transport_Smtp');
//Zend_Loader::loadClass('Zend_Mail_Transport_Sendmail');
//Zend_Loader::loadClass('Zend_Mail');
Zend_Loader::loadClass('Zend_Session_Namespace');
Zend_Loader::loadClass('Zend_Db_Adapter_Pdo_Pgsql');
//Zend_Loader::loadClass('Zend_Date');
Zend_Loader::loadClass('Zend_Log');


// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(false);
$frontController->setBaseUrl('http://hiring.local');
$frontController->setControllerDirectory('/application/controllers');

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);


$application->bootstrap()->run();

なぜこのエラーが発生するのか、146行目のloader.phpを調べたところ、

include_once($filename)エラーはそこから発生しています

4

1 に答える 1

4

ここにはかなりの数の問題があります:

  • application/modelsapplication/controllersおよびapplication/views/scriptsインクルードパス上にあるべきではありません。
  • $loader->registerNamespace('hiring');おそらくそうであるはずです$loader->registerNamespace('Hiring_');(ただし、この名前空間を使用していることを示すコードサンプルにはサインがありません)。
  • $loader->setFallbackAutoloader(true);おそらく必要ありません(含まれているコードサンプルには、これが必要であるというサインはありません)。
  • すべてのZend_Loader::loadClass行を削除する必要があります。オートローダーの要点は、クラスを自分で要求したりロードしたりする必要がないことです。
  • 少なくともフロントコントローラー構成をブートストラップクラスに移動する必要があります

しかし、これらのことのどれもあなたが報告している問題に影響を与えません。標準のオートローダー設定では、名前をファイルシステムに直接マップできるクラスのみがロードされます(パス内でアンダースコアをスラッシュに変換することにより、たとえば、クラスZend_Db_Tableはに存在しlibrary/Zend/Db/Table.phpます)。このクラスApplication_Model_Hiringはこのモデルに適合しません。この命名スキームも使用する場合は、リソースオートローダーを設定する必要があります。これにより、クラス名の最後の部分だけが、内のいくつかの事前定義されたサブフォルダーにマップされますapplication/

次のメソッドをブートストラップクラスに追加します。

protected function _initAutoloader()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace('Hiring_');

    $applicationResourceAutoloader = new Zend_Loader_Autoloader_Resource(array(
        'basePath' => APPLICATION_PATH,
        'namespace' => 'Application'
    ));
    $autoloader->pushAutoloader($applicationResourceAutoloader);

    return $autoloader;
}

$autoloader = Zend_Loader_Autoloader::getInstance();これにより、Zend Frameworkクラスを自動ロードする標準のオートローダー()がセットアップされます。次に、名前空間'Hiring'を登録します。これは、この名前で始まるクラスをライブラリフォルダーに含める場合にのみ必要です。

次に、名前空間「Application」を使用して別のリソースオートローダーを作成します。これにより、モデルを含むアプリケーションフォルダーからクラスが読み込まれます。Application_Model_Hiringクラスがで定義されていると仮定すると、application/models/Hiring.php機能するはずです。

詳細については、http://framework.zend.com/manual/1.12/en/zend.loader.autoloader-resource.htmlをご覧ください。

于 2013-01-15T09:56:09.257 に答える