【问题标题】:Class extending Zend_Controller_Action, not found by Zend ToolZend Tool 未找到扩展 Zend_Controller_Action 的类
【发布时间】:2011-07-19 12:35:56
【问题描述】:

我创建了Zend_Controller_Action 的类扩展,并添加了一些用户定义的方法,这些方法可以从任何控制器等访问。

一切正常,直到我使用 Zend 工具创建一个新动作,因为这一次 Zend 工具不会找到我的扩展类。

错误信息:

致命错误:在....中找不到类“CMS_Zend_Controller_Action”

这是扩展 Zend_Controller_Action 的类,也是由 indexController 等其他控制器扩展的类。

如何让课程被发现。我是否必须包括每个文件夹,就像我的课程一样? Zend 会这样做吗?我不这么认为。它是怎么做到的?

【问题讨论】:

  • CMS_Zend_Controller_Action 在你的应用程序中的什么位置?我还建议不要在你的类名中包含“Zend”——约定是使用你自己的命名空间而不是“Zend”这个词,而不是除它之外。所以你会有 CMS_Controller_Action 代替。
  • @Tim Fountain,我正在扩展 Zend_Controller_Action,所以我更愿意指出这一点。也因为,我也有自己的 CMS_Controller_Action
  • 只是一个确认:我能够在 Windows 上使用 Netbeans+Zend 框架支持来复制它。在调试时,我意识到 Zend_Tool 不使用应用程序引导机制(至少在我测试时没有)。
  • @madflow,没错。这可能是问题所在。如何解决?

标签: php zend-framework zend-tool


【解决方案1】:

简单。 :-p 如果它可以找到您的核心控制器,那么您只需要包含扩展控制器的路径。

http://php.net/manual/en/function.set-include-path.php

set_include_path(path_to_your_extended_classes) 在你的 index.php 中,也就是路由文件。

【讨论】:

  • 我在我的问题中也提到了这一点。我发现这个选项非常有限。因为我必须包括所有需要的文件夹。如果我必须这样做,我想知道是否有一种方法可以让我提到将每个文件夹包含在一个文件夹中。顺便说一下Zend framewook是做什么的,set_include_path每个库文件夹。
  • @Starx 它将递归地查看文件夹。所以设置包含路径a/ 还将包括a/b、a/b/c、a/d...等。试试看。只需不到几分钟的时间。
  • 在这种情况下,它已经包含在 set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); 包括 CMS 和 Zend 在内的所有库都包含在此文件夹中
  • @Starx 为什么get_include_path(),后面有个逗号?
  • Array 确实支持末尾的额外命令。检查this
【解决方案2】:

我认为您在这里尝试的不是 Zend_Tool 的目的。

据我了解您的问题和设置,您已经在库中创建了一个类。当然,您可以在您自己的库中使用许多您自己的类来扩展 Zend_Controller_Action(我也这样做)。向这样的类添加一个动作可能是不寻常的,但对于 Zend_Tool 来说是一个问题,原因有一个。

我相信 Zend_Tool 仅与 /application 等众所周知的结构有关,/modules 内部的结构也是如此。如果您创建一个控制器类 Zend_Tool 将为您做一些工作,例如将所需的文件夹结构添加到您的 /application 或 /modules 文件夹中。与需要查看文件的操作方法相同。在你的库中拥有一个控制器类并不(不应该)需要所有这些,因此没有构建到 Zend_Tool 中。我认为 Zend_Tool 不支持您在库中创建的任何类。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2014-11-26
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    相关资源
    最近更新 更多