我正在尝试将doctrine2沙箱与默认的Zend Framework App集成。当我尝试在控制器中使用命名空间时,我得到一个'无效的控制器类(“IndexController”)'错误
本作品:
use Entities\User, Entities\Address;
class IndexController extends Zend_Controller_Action
{
...
}
这不是(但应该?):
namespace Entities;
class IndexController extends \Zend_Controller_Action
{
...
}
答案 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来导入命名空间并使用它。
这就是为什么它适用于你的第一个例子而不是你的第二个例子。
希望我是对的,这有帮助!