php - 什么时候可以在 Symfony2 中创建两个同名的 Controller ?

标签 php symfony namespaces

在具有相同供应商名称的同一项目的不同包中定义第二个 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/

相关文章:

php - 在自动生成的 PHP 页面中显示某些 HTML?

symfony - 教义 : advantages/drawback of a bidirectional relation

Laravel 5 防止 'use'

css - 没有嵌套选择器的封装/命名空间 CSS 和 Sass 扩展

c++ - 在 C++ 的命名空间中键入

php - 接口(interface)如何用于松散耦合?

php - 结合 json 和 json_decode

php - MySQL GROUP BY 和条件

mongodb - 绑定(bind)学说ORM实体和学说ODM文档,在SonataAdminBundle中使用

javascript - Symfony 发送 AJAX POST 请求