【问题标题】:Laravel: Created a service but class is not foundLaravel:创建了一个服务但找不到类
【发布时间】:2016-04-25 12:12:23
【问题描述】:

创建了以下文件:

文件:App\Services\Custom\Auth\AuthService.php

名称空间:App\Services\Custom\Auth

类名:AuthCustom

内部方法:foo()

在我的控制器中,我试图从我创建的服务中调用 foo 方法。 App\Services\Custom\Auth\AuthService\AuthCustom::foo()

为什么一直返回Class 'App\Services\Custom\Auth\Authservice\AuthCustom' not found

我做错了什么?

谢谢!!

编辑: 我在 composer.json 中添加了这个并运行 composer dump-autoload 没有错误。 它有效!

"autoload": {
    "classmap": [
        "database",
        "app/Services/Custom/Auth/AuthService.php"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

【问题讨论】:

  • 您的 composer.json 中是否有将 App\Custom\Auth 映射到 App\Services\Custom\Auth 的内容?没有它,您的命名空间中将缺少 Services
  • 我尝试在提供程序中添加 App\Services\Custom\Auth\AuthService::class 但不起作用
  • 我认为问题在于它不是 ServiceProvider 吗?

标签: php class laravel namespaces


【解决方案1】:

您似乎没有运行composer dump-autoloadphp composer.phar dump-autoload

composer.json 对于自动加载非常重要!

【讨论】:

  • 我在 config/app.php 中究竟添加了什么?
  • 我不明白你的意思。例如,必须将服务提供者添加到 app.php 中的 providers 数组中。但是一个类的工作方式如下:您的 php 脚本的第一行是:namespace App\Custom\Auth;,因此 composer.json 自动加载正确的类(您的命名空间必须路由到包含该类的文件)。您是否更改了默认命名空间App
  • 不,我没有。尚未将其添加到自动加载作曲家。会尝试比js
【解决方案2】:

Laravel 需要一个包含所有 php 文件的大文件,通常通过调用 artisan 或 composer 生成:php artisan dump-autoload / composer dump-autoload

它只是重新生成需要包含在项目中的所有类的列表(autoload_classmap.php)。非常适合在项目中有新课程时使用。

更多详情:http://developed.be/2014/08/29/composer-dump-autoload-laravel/

【讨论】:

    【解决方案3】:

    您的命名空间与您的目录结构不匹配。如果你的类在App\Services\Custom\Auth\AuthService.php,那么你的命名空间需要是App\Services\Custom\Auth。如果你真的希望你的命名空间是App\Custom\Auth,那么你的文件需要是App\Custom\Auth\AuthService.php

    修复此问题后,请确保在命令行上执行 composer dump-autoload

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-19
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      相关资源
      最近更新 更多