【问题标题】:Drupal 8 - Fatal error: Cannot redeclare classDrupal 8 - 致命错误:无法重新声明类
【发布时间】:2017-02-20 10:02:31
【问题描述】:

我是 Drupal 8 的新手。

现在,我使用的是 8.2.6 版本。我正在关注link 的教程。

我也是这样做的。

但是选项卡菜单没有出现,我如何访问该模块? 当我清除所有缓存时,我得到了这个错误:

Fatal error: Cannot redeclare class Drupal\bd_contact\AdminController in D:\Dropbox\projects\drupal-8.2.6\modules\custom\bd_contact\src\Controller\AdminController.php on line 7

有人知道我为什么会出现这个错误吗?

【问题讨论】:

    标签: drupal drupal-8


    【解决方案1】:

    PHP 错误 Cannot redeclare class 是在您尝试创建已创建的类时引起的。

    例如:

    //create one time
    class AdminController {}
    
    //and recreated the class with the same name
    class AdminController {}
    

    您需要验证AdminController.php 文件是否有两个同名的类,然后将其与您的GitHub 项目link 项目上的本教程源代码进行比较。

    【讨论】:

    • 感谢您将我重定向到 GitHub 项目!
    • @Akki,我不知道您是在感谢还是在抱怨,但是 OP 正在遵循我在答案中提到的 GitHub 项目中可用的示例。而且他说他照样照样,所以我就跟他说验证源代码。
    • 如果你仔细阅读问题,提问者已经提到了链接,这不是 GitHub 的。 link的代码和Github的代码其实是有区别的。 Github 代码运行良好。你误会了。
    • 我阅读并编辑了这个问题,当我开始使用 Drupal 8 时,我遵循了相同的教程,如果您尝试打开链接并阅读:您将看到代码步骤和相同的代码可以在我在问题中提到的 Github 链接上找到。我不知道您通常是如何遵循教程的,但是当任何事情都无法正常工作时,看看您正在遵循的代码是个好主意。
    【解决方案2】:

    可能控制器的名字选得不好,因为在 Drupal 核心中已经有一个这样命名的控制器了。 https://api.drupal.org/api/drupal/core!modules!system!src!Controller!AdminController.php/class/AdminController/8.2.x

    使用命名空间,它应该不会导致问题,但尝试在类文件和路由文件中重命名您的控制器。

    【讨论】:

      【解决方案3】:

      由于不太可能有人重新声明同一个类,尤其是在同一个控制器文件上,即只有一个类,我认为这个问题是由于缺少上述同事提到的命名空间。

      只需在类的顶部添加如下一行:

      namespace Drupal\YOUR_MODULE\Controller;

      我知道这个问题很老,但我最近才来到这里,并没有找到解决我问题的确切答案,所以希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-17
        • 2014-11-07
        • 2012-07-31
        • 2016-03-25
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多