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 回答