【问题标题】:Laravel 5 namespacing issueLaravel 5命名空间问题
【发布时间】:2017-11-23 09:35:03
【问题描述】:

我有一个应用程序,其中我已将所有控制器/模型/存储库/服务逻辑移到本机 Laravel 应用程序文件夹之外。我在根目录中有Acme 文件夹,我已将以下内容添加到作曲家:

    "psr-4": {
        "App\\": "app/",
        "Acme\\": "acme/"
    }

AccountController 的命名空间如下:

<?php namespace Acme\Account\Controller;

我遇到的问题就在这一行:

urlContainer['userAjax'] = "{!! RoutingService::actionAjax('Account\Controller\AccountController@getUserAjax') !!}";

我收到以下错误消息:

Action \Acme\Account\Controller\AccountController@getUserAjax not defined

控制器存在,方法存在,路由存在。我似乎看不出是什么导致了问题?

【问题讨论】:

    标签: php laravel namespaces


    【解决方案1】:

    我认为问题在于您的文件的位置。

    您的配置表明文件夹 acme/ 中的每个类都在 Acme\ 命名空间中。您的控制器的全名是Acme\Account\Controller\AccountController。根据 PSR-4,位置应该是:

    acme/Account/Controller/AccountController.php
    

    如果不是这种情况,您可以按如下方式更改自动加载器设置:

    "Acme\\Account\\": "acme/"
    

    或移动您的文件。

    编辑:另一种可能是控制器中的namespace 包含错字。

    【讨论】:

    • prs4 自动加载器是否区分大小写?
    • 这取决于您的操作系统(linux:是,windows:否,mac:也许),但我会这样对待。
    • 我刚刚注意到您可能想知道,因为命名空间中的小写 a。那只是一个错字,对不起
    • 首字母大写,路径没问题,没有错别字。也许其他东西正在破坏它
    • 抱歉,我恢复了该更改。第一个字母应该是 acme,因为那是文件夹名称,并且其中的所有文件夹都应该大写并且与命名空间完全匹配。如果你不想这样,你可能应该使用不同的自动加载器,比如类映射。
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 2023-04-09
    • 1970-01-01
    • 2015-09-16
    • 2017-12-13
    • 2014-09-03
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多