在具有相同供应商名称的同一项目的不同包中定义第二个 Controller 类 PostController 后,我开始出现以下错误。
Fatal error: Cannot redeclare class Amce\Bundle\CrudzBundle\Controller\PostController in C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php on line 350
我了解此错误意味着我对两个类 (OOP) 具有相同的名称。但是为什么即使我有不同的供应商部分的不同捆绑包,我仍然会出现此错误?这是否意味着 Synfony2 不允许在所有情况下都有两个同名的 Controller 类?
您的专家解释总是受到赞赏。
最佳答案
我假设罪魁祸首类的命名空间是:
namespace Amce\Bundle\CrudzBundle\Controller
但是文件路径是:
C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php
如果您复制/粘贴原始类,您可能忘记更改命名空间。
自动加载器将检查此目录中不存在的类(由于所述命名空间),但是在此之前,它会发现之前完全相同的命名空间/类。
在 PHP 5.3 中,命名空间被合并到类名中。重要的是要记住它们之间没有区别,因为它们是在编译时组合的。
尽管事实上您可以调用
__NAMESPACE__
获取当前的命名空间,实际上是 不是 对代码执行动态自省(introspection),但在编译时将魔术常量转换为常量字符串。类也是如此,命名空间成为类名的一部分,那个是类在内部引用表中的索引方式。
所以要注意命名空间。
关于php - 什么时候可以在 Symfony2 中创建两个同名的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785249/