Php 何时可以在Symfony2中创建两个同名控制器?

Php 何时可以在Symfony2中创建两个同名控制器?,php,symfony,namespaces,Php,Symfony,Namespaces,在使用相同的供应商名称在同一项目的不同包中定义了第二个控制器类PostController之后,我开始出现以下错误 致命错误:无法重新声明类 中的Amce\Bundle\CrudzBundle\Controller\PostController C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php 在线350 我知道这个错误意味着两个类的名称相同(OOP)。但为什么即使我有一个不同的捆绑包和不同的

在使用相同的供应商名称在同一项目的不同包中定义了第二个控制器类PostController之后,我开始出现以下错误

致命错误:无法重新声明类 中的Amce\Bundle\CrudzBundle\Controller\PostController C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php 在线350

我知道这个错误意味着两个类的名称相同(OOP)。但为什么即使我有一个不同的捆绑包和不同的供应商部件,我仍然会有这个错误?这是否意味着Synfony2不允许在所有情况下拥有两个同名的控制器类


非常感谢您的专家解释。

我假设罪犯类的名称空间是:

namespace Amce\Bundle\CrudzBundle\Controller
但是,文件路径为:

C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php 
如果复制/粘贴原始类,则可能忘记更改名称空间

自动加载程序将检查此目录中不存在的类(因为所述名称空间),但是在此之前,它将发现完全相同的名称空间/类

在PHP5.3中,名称空间被合并到类名中。记住它们之间没有区别很重要,因为它们是在编译时组合在一起的

尽管您可以调用
\uuuu NAMESPACE\uuu
来获取当前名称空间,但实际上这并不是执行代码的动态内省,而是在编译时将神奇常量转换为常量字符串

类也是如此,名称空间成为类名的一部分,这就是类在内部引用表中的索引方式


所以请注意名称空间。

我假设罪犯类的名称空间是:

namespace Amce\Bundle\CrudzBundle\Controller
但是,文件路径为:

C:\xampp\htdocs\community\src\Amce\CrudzBundle\Controller\PostController.php 
如果复制/粘贴原始类,则可能忘记更改名称空间

自动加载程序将检查此目录中不存在的类(因为所述名称空间),但是在此之前,它将发现完全相同的名称空间/类

在PHP5.3中,名称空间被合并到类名中。记住它们之间没有区别很重要,因为它们是在编译时组合在一起的

尽管您可以调用
\uuuu NAMESPACE\uuu
来获取当前名称空间,但实际上这并不是执行代码的动态内省,而是在编译时将神奇常量转换为常量字符串

类也是如此,名称空间成为类名的一部分,这就是类在内部引用表中的索引方式


因此,请注意名称空间。

AFAIK symfony不会这样做,并且在同一名称空间中不能有两个名称相同的类(或接口、抽象或特征)。供应商名称空间和您的名称空间是相同的?@mloureiro,我希望我对
vendor
的含义没有误解,但在这里,我将
Amce
作为供应商,将
AmceCrudzBundle
作为名称空间。我错了吗?thanks@mloureiro,但我已经在
AmceFruitsBundle
shopmanagementsbundle
中使用了一个同名的控制器,并且出现了相同的错误。请注意,symfony不会这样做,并且在同一命名空间中不能有两个同名的类(或接口、抽象或特征)。供应商名称空间和您的名称空间是相同的?@mloureiro,我希望我对
vendor
的含义没有误解,但在这里,我将
Amce
作为供应商,将
AmceCrudzBundle
作为名称空间。我错了吗?thanks@mloureiro,但我在
AmceFruitsBundle
shopmanagementsbundle
中已经有了一个同名的控制器,并且出现了相同的错误感谢您指出这可能是复制/粘贴问题,我通过更改
名称空间Amce\Bundle\CrudzBundle\controller解决了这个问题到名称空间
Amce\CrudzBundle\Controller在控制器文件中,它现在正在工作。非常感谢,我不完全理解(霍恩斯尔蒂)。在项目的所有控制器中,我使用
名称空间Amce\Bundle\CrudzBundle\Controller现在对于这个特定的控制器,我必须从中省略
/Bundle
!!真正地weird@whitelettersinblankpapers您可能更改了目录结构。但令我不解的是,为什么那个错误说班级在第350行。是的,先生,就是这样。我想我累了,应该去睡觉了!:-)祝您愉快谢谢您告诉我这可能是一个复制/粘贴问题,我通过更改
名称空间Amce\Bundle\CrudzBundle\Controller解决了这个问题到名称空间
Amce\CrudzBundle\Controller在控制器文件中,它现在正在工作。非常感谢,我不完全理解(霍恩斯尔蒂)。在项目的所有控制器中,我使用
名称空间Amce\Bundle\CrudzBundle\Controller现在对于这个特定的控制器,我必须从中省略
/Bundle
!!真正地weird@whitelettersinblankpapers您可能更改了目录结构。但令我不解的是,为什么那个错误说班级在第350行。是的,先生,就是这样。我想我累了,应该去睡觉了!:-)祝你今天愉快