0

我有一个带有 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

4

0 回答 0