【问题标题】:Symfony 4 controllers in sub folders producing error子文件夹中的 Symfony 4 控制器产生错误
【发布时间】:2019-02-21 21:22:01
【问题描述】:

只是一个简单的问题,为什么我会得到这个

自动加载器预期类“App\Controller\Admin\AdminUnitController”将在文件“/home/glen/public_html/businessdirectory.glendev.local/vendor/composer/../../src/Controller/Admin”中定义/AdminUnitController.php”。找到文件但类不在其中,类名或命名空间可能在 /home/glen/public_html/businessdirectory.glendev.local/config/services.yaml 中有错字(在资源“/home/ glen/public_html/businessdirectory.glendev.local/config/services.yaml")。

我有类名为 AdminUnitController 的 AdminUnitController.php。一切都很好,直到我决定将管理控制器放在他们自己的子文件夹中,如下所示:

Controller\Admin\AdminUnitController.php

【问题讨论】:

    标签: symfony symfony4


    【解决方案1】:

    从自动加载器的消息来看,你的问题很清楚,你的文件确实在它应该在的位置,但是你的类或命名空间是错误的。

    我猜你改变了文件结构但没有调整你的命名空间。

    给定文件src\Controller\Admin\AdminUnitController.php

    你的类应该是这样的(特别注意命名空间):

    <?php
    
    namespace App\Controller\Admin;
    
    class AdminUnitController 
    {
        // some code here
    }
    

    这实际上不是您在这里面临的 Symfony 行为,而是作曲家之一,它通过自动加载器为 Symfony 服务并使用 PSR-4 类自动加载约定。

    供参考

    1) 查看您的composer.json 有这些行:

    {
      // some definitions here
      "autoload": {
        "psr-4": {
          "App\\": "src/"
        }
      },
      "autoload-dev": {
        "psr-4": {
          "App\\Tests\\": "tests/"
        }
      },
      // some more definitions here
    }
    

    2) 请参阅 PSR-4 命名约定:尤其是其文档中的示例:https://www.php-fig.org/psr/psr-4/#3-examples

    【讨论】:

    • 有趣,我没有意识到 Symfony 如此关心控制器命名空间。说得通。感谢您的回复。
    • 虽然这样做会产生一个新错误:找不到用于服务“App\Controller\AdminBusinessController”的类“App\Controller\AdminBusinessController”。
    • 很可能出于同样的原因,您将控制器的位置更改为src\Controller\Admin\AdminBusinessController,但没有调整类AdminBusinessController 的命名空间。或者你在项目中的某个地方有一个use App\Controller\AdminBusinessController;,它应该适应use App\Controller\Admin\AdminBusinessController;
    • 至于“我没有意识到 Symfony 关心控制器命名空间”,Symfony 并不关心。另一方面,为 Symfony 提供自动加载器的 Composer 确实如此,您可以看到关于 PSR-4 自动加载器命名约定的行为方式的编辑答案
    • 谢谢,我去看看。抱歉,如果这听起来很愚蠢,我最近才从使用 CI 转向 symfony 多年(顺便说一句 symfony 胜过 CI !!!)
    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多