0

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

这有效:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

这不会(但应该?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}
4

2 回答 2

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

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

于 2010-09-03T19:55:47.827 回答
0

在阅读手册并阅读此页面的某些内容后,似乎在 PHP 中,当您想要围绕命名空间声明和构造时,您会使用第二种语法。所以这会创建像

Entities\IndexController 

所以 Zend 再也找不到它了。

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

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

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

于 2010-09-03T04:46:26.627 回答