doctrine2 zend框架命名空间控制器

时间:2010-09-03 02:06:59

标签: zend-framework namespaces controllers doctrine-orm

我正在尝试将doctrine2沙箱与默认的Zend Framework App集成。当我尝试在控制器中使用命名空间时,我得到一个'无效的控制器类(“IndexController”)'错误

本作品:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

这不是(但应该?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}

2 个答案:

答案 0 :(得分:3)

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

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

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)。 / p>

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

答案 1 :(得分:0)

在浏览the manual并阅读this page之后,在PHP中,当您想要在命名空间周围声明和构造时,您会使用第二种语法。这样就可以创建像

这样的对象
Entities\IndexController 

所以Zend不再发现它了。

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

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

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