php – 为什么使用Zend_Config对象加载Zend_Application会产生与
我似乎遇到一个问题,即使用Zend_Config对象加载Zend_Application对象会产生与使用文件名加载Zend_Application对象不同的结果.为了说明我的观点,我有以下两种加载方法,第一种方法有效(请注意,此时所有常量都是定义的:
/** Zend_Application */ require_once 'Zend/Application.php'; // Create application,bootstrap,and run $application = new Zend_Application( APPLICATION_ENV,APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run(); 这个不起作用,并给我错误: 致命错误:/var/www/RoommateExpenseBuddy/allan/library/Zend/Application/Bootstrap/Bootstrap.php:91中未捕获的异常’Zend_Application_Bootstrap_Exception’,消息’未向前端控制器注册默认控制器目录’ 堆栈跟踪:#0 /var/www/RoommateExpenseBuddy/allan/library/Zend/Application.php(366):Zend_Application_Bootstrap_Bootstrap-> run() #1 /var/www/RoommateExpenseBuddy/allan/public/index.php(36):Zend_Application-> run() 在第91行的/var/www/RoommateExpenseBuddy/allan/library/Zend/Application/Bootstrap/Bootstrap.php中抛出#2 {main} /** Zend_Application */ require_once 'Zend/Application.php'; require_once 'Zend/Config.php'; require_once 'Zend/Config/Ini.php'; require_once 'Zend/Debug.php'; $appConfig = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini',APPLICATION_ENV); // Create application,$appConfig ); $application->bootstrap() ->run(); 他们都使用相同的文件,如下所示: [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" emailNotice.email = "info@associateinnovations.com" emailNotice.name = "Roommate Expense Buddy" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.frontController.defaultmodule = "global" resources.frontController.params.prefixDefaultModule = true resources.db.adapter = "PDO_MYSQL" resources.db.isdefaulttableadapter = true resources.db.params.dbname = "db_name" resources.db.params.username = "db_user" resources.db.params.password = "mypassword" resources.db.params.hostname = "localhost" resources.db.params.charset = "UTF8" invitation.defaultViewPath = APPLICATION_PATH "/modules/global/views/scripts/invitation" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 我的目录结构看起来像这样,扩展了重要的文件夹. |~application/ | |~configs/ | | |-application.ini | | `-navigation.xml | |+helpers/ | |+layouts/ | |+migrations/ | |~modules/ | | `~global/ | | |+controllers/ | | |+forms/ | | |+models/ | | `+views/ | `-Bootstrap.php |+bin/ |+data/ |+docs/ |+library/ |+public/ `+tests/ 重申一下,在Zend_Application的构造函数中使用文件名加载INI文件会产生预期的结果(工作应用程序).在Zend_Application的构造函数中传递Config对象给出了上述错误. 任何线索,为什么这会有所作为? 解决方法
在我的情况下,与套管不匹配.原始的默认目录是在没有驼峰套管的情况下声明的,而我需要添加的前端控制器目录确实是套管的.
所以这就是我所拥有的: resources.frontcontroller.controllerDirectory.default = APPLICATION_PATH "/default/controllers" resources.frontController.controllerDirectory.mydir = APPLICATION_PATH "/default/controllers" 总而言之,在对应用程序资源进行初始查找时,ZF没有考虑外壳.然而,对已经实例化的资源的后续查找必须匹配第一个声明的情况. Zend_Application_Bootstrap_BootstrapAbstract :: _ resolvePluginResourceName /** * Resolve a plugin resource name * * Uses,in order of preference * - $_explicitType property of resource * - Short name of resource (if a matching prefix path is found) * - class name (if none of the above are true) * * The name is then cast to lowercase. * * @param Zend_Application_Resource_Resource $resource * @return string */ protected function _resolvePluginResourceName($resource) { if (isset($resource->_explicitType)) { $pluginName = $resource->_explicitType; } else { $className = get_class($resource); $pluginName = $className; $loader = $this->getPluginLoader(); foreach ($loader->getPaths() as $prefix => $paths) { if (0 === strpos($className,$prefix)) { $pluginName = substr($className,strlen($prefix)); $pluginName = trim($pluginName,'_'); break; } } } $pluginName = strtolower($pluginName); return $pluginName; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |