【问题标题】:doctrine2 zend framework namespaceing controllers学说2 Zend框架命名空间控制器
【发布时间】:2010-09-03 02:06:58
【问题描述】:

我正在尝试将教义 2 沙箱与默认 Zend 框架应用程序集成。当我尝试在控制器中使用命名空间时,出现“无效的控制器类(“IndexController”)”错误

这个作品:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

这不会(但应该?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}

【问题讨论】:

    标签: zend-framework namespaces controllers doctrine-orm


    【解决方案1】:

    在您的第一个示例中,您将命名空间导入控制器。在第二个示例中,您将控制器分配给命名空间。

    导入命名空间允许您引用类,而无需使用其完全限定的类名。

    new \Entities\User() // without import
    new User() // with import
    

    为控制器分配命名空间实际上会更改类的完全限定名称。

    new \IndexController() // without namespace
    new \Entities\IndexController() // with namespace
    

    (命名空间内的类始终可以引用同一命名空间中的其他类,而不必“使用”它。我怀疑这是您尝试使用选项 2 的主要原因)。

    Zend Framework 1.10 仍然不知道命名空间。在解析 URL 并尝试加载控制器时,它只会在默认全局命名空间中查找 \IndexController,并且不知道它已分配给用户定义的命名空间 (\Entities\IndexController)。

    我的建议是,在 ZF 中使用控制器时,不要为它们分配命名空间。导入工作正常。我们必须等到 ZF 2.0 才能获得完整的命名空间支持。

    【讨论】:

    • 感谢您的分解。我不明白为什么在控制器名称前面放置一个反斜杠会产生语法错误。 \IndexController 和 \Entities\IndexController 都产生以下错误:语法错误,意外 T_NS_SEPARATOR,期望 T_STRING
    • 无论如何我都会听从你的建议,现在只导入命名空间。
    • 我要补充一点,Zend 框架并非完全 无视命名空间。只是 MVC 控制器目前无法命名空间。您的库代码、助手、表单等的其余部分可以命名空间。
    【解决方案2】:

    在通过the manual 并阅读了一些this page 之后,似乎在PHP 中,当您想要围绕命名空间声明和构造时,您会使用第二种语法。这样就会创建像

    这样的对象
    Entities\IndexController 
    

    所以 Zend 再也找不到它了。

    根据那些站点,您必须使用 use 来导入命名空间并使用它。

    这就是为什么它适用于您的第一个示例而不是您的第二个示例。

    希望我是对的,这会有所帮助!

    【讨论】:

    • Entities\IndexController 返回以下错误:语法错误,意外的 T_NS_SEPARATOR,期待 '{' 我曾按照类似的思路思考并尝试过 \IndexController - 但我得到了同样的错误
    • 但是你为什么要使用第二个版本^它不是那样工作的。如果你想导入你键入的类,请使用 myobject。所以你想在你的控制器中使用一些东西吗?
    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2011-04-07
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多