我找到了一些与此问题密切相关的答案,但我仍然无法解决问题。 我相信人们说我的包含路径有些不对劲,但我已经尝试了所有我无法找到的决议。
这是错误:
Fatal error: Class 'Zend_Controller_Action' not found in /Users/*me*/Sites/*site*/application/controllers/IndexController.php on line 3
这是包含声明:
$newIncludePath = array();
$newIncludePath[] = '.';
$newIncludePath[] = 'include';
$newIncludePath[] = get_include_path();
$newIncludePath[] = '../library';
$newIncludePath[] = '../application/classes/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/controllers';
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath);
set_include_path($newIncludePath);
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
我一直在键盘上敲我的头几个小时搜索论坛。我是zend和php的新手。这件事让我头疼。我已经明确地将控制器添加到路径中。我不知道我在忽视什么。
顺便说一句, me 和 site 是出于隐私原因而被编辑的名称。
我永远感激你的决心。
MJS编辑:
我注意到我的包含有点不稳定。所以这是一个重做:
$newIncludePath = array();
$newIncludePath[] = '.';
$newIncludePath[] = get_include_path();
$newIncludePath[] = '../library';
$newIncludePath[] = '../application/classes/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/library/';
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath);
set_include_path($newIncludePath);
var_dump的输出:
string(148) "../application/controllers:.:.:/Applications/MAMP/bin/php5/lib/php:../library:../application/classes/:../application/models/:../application/library/"
我注意到Zend / Controller / Action存在于../library下。所以,我不明白为什么应用程序找不到它。
如果我从PHPDebug运行IndexController,它将返回
string(170) ".:/Users/me/Sites/site:/Applications/Zend/Zend Studio - 7.1.0/plugins/org.zend.php.framework.resource_7.1.0.v20091101-1523/resources/ZendFramework-1/library/"
Fatal error: Class 'Zend_Controller_Action' not found in /Users/me/Sites/site/application/controllers/IndexController.php on line 5
答案 0 :(得分:3)
Zend_Appilcation自动加载器的默认行为是获取类名
Zend_Controller_Action
并将其转换为路径
Zend/Controller/Action.php
然后尝试包含/要求所需的文件来加载该类。
所以,你可能会遇到两个不同的错误
您的PHP包含路径未指向默认的Zend库文件夹,并且尝试包含Zend/Controller/Action.php
失败。
自动装带器未正确注册
因此,在您的IndexController.php
文件中,在类声明上方的全局命名空间区域中添加以下内容
var_dump(get_include_path());
这将输出您的包含路径值。检查包含路径中的每个单独路径,并确保将Zend/Controller/Action.php
附加到其中一个路径解析为Action.php文件。如果没有,请采取措施确保路径在那里允许这种情况发生。
(上面假设您正在使用Zend_Application,Zend自己的应用程序框架基于他们自己的Zend Framework。如果您单独使用这些组件可能会有进一步的复杂化)
答案 1 :(得分:0)
您的包含路径是相对于应用程序根目录的,但文件正在加载到不同的级别(即应用程序/控制器)。因此,所有包含路径现在看起来像应用程序/控制器/../库不正确。
我会通过在include路径中使用绝对路径来解决这个问题。例如,尝试将../library更改为Users / me / Sites / site / library