我有一个带有 web 模块和 cli 模块的 Zend Framework 1 应用程序。
index.php 当然是在 web 根目录 /crm/app/www 中,并且 /crm/app/cli 中有一个几乎相同的 run.php 最重要的是,我认为它们都从 / 加载相同的 application.ini crm/app/configs/application.ini
application.ini 包含一行
timezone = "美国/洛杉矶"
实际的失败是在自动加载中,但我可以简单地这样:
我把 include_once('C:\wamp\www\client22\crm\lib\Crm\DateTime.php'); $res = get_declared_classes();
在 /crm/app/www/controllers/DashboardController::indexAction()
并逐步调试到 $res.... 我在声明的类数组中看到 Crm_DateTime
我把 include_once('C:\wamp\www\client22\crm\lib\Crm\DateTime.php'); $res = get_declared_classes();
在 crm/app/cli/controllers/AutomationController::processAction() 并逐步调试到 $res 行....没有 Crm_DateTime
我有 Crm_Email 和 Crm_Logger,我可以在同一个地方添加它们,并让它们显示为在 cli 模块中声明......
C:\wamp\www\client22\crm\lib\Crm\DateTime.php 非常基本
class Crm_DateTime extends DateTime
{
/**
* When false, the date had a parse error
* @var bool
*/
public $isValid = true;
/**
* A reference to the DateTimeZone object that belongs to this object
* @var DateTimeZone
*/
protected $_timezone;
protected $_timezonestring = "America/Los_Angeles";
//.... a few more protected properties such as an array of holidays
//... a few simple methods to do client specific validation
}
我可以根据需要发布更多内容...但问题不在于课程的作用...问题在于它根本没有得到“声明”或“注册”或 include_once 实际上应该对课程做什么... . 当我单步执行代码时......我什至看到文件已找到并“包含”——至少 include_once 调用会导致它在进入 $res = get_declared_classes(); 之前显示在屏幕上;
从长远来看,这意味着在类的实际使用中...... Zend 自动加载器执行 include_once 然后
if (!class_exists($class, false) && !interface_exists($class, false)) {
require_once 'Zend/Exception.php';
throw new Zend_Exception("File \"$file\" does not exist or class \"$class\" was not found in the file");
}
这就是抛出异常并且我的 cli 应用程序死掉的地方..... grrrrr
我已经耗尽了我的想象力。您会在哪里诊断此类注册失败的原因?
谢谢吨,
G