在应用程序文件夹中使用 类 时如何修复命名空间错误?

How can I fix the namespace error when using classes within the app folder?

我正在将遗留 laravel 应用程序从 Laravel 5 升级到 8,并将 运行 升级到一堵砖墙。 None 我的服务提供商工作,我不明白为什么。

上一个结构

应用 -->服务 ------>条纹

在每个服务提供商文件夹中,我将创建三个文件,如下所示:

  1. Stripe.php
  2. StripeFacade.php
  3. StripeServiceProvider.php

stripe.php

之内
<?php

namespace app\Services\Stripe;


class Stripe
{

}

?>

StripeFacade.php

之内
<?php

namespace app\Services\Stripe;

use Illuminate\Support\Facades\Facade;

class StripeFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'Stripe';
    }
}

StripeServiceProvider.php

之内
<?php

namespace app\Services\Stripe;

use Illuminate\Support\ServiceProvider;

class StripeServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('Stripe', function($app) {
            return new Stripe();
        });
    }
}

在我的 Config/app.php 文件中,我会像这样注册服务提供商和外观:

'providers' => [
    app\Services\Stripe\StripeServiceProvider::class,
],

'aliases' => [
    'Stripe' => app\Services\Stripe\StripeFacade::class,
]

在我的控制器中,我将 Stripe 服务称为

use Stripe;

...

public function example(){
   $auth = Stripe::auth();
}

然后我会在 Config/app.php 文件中得到这个错误

Class "app\Services\Stripe\StripeServiceProvider" not found

我尝试将服务目录添加到我的 psr-4,但即使在转储 congifs 和自动加载之后似乎也没有成功。

"autoload": {
        "psr-4": {
            "App\": "app/",
            "Services\": "app/Services",
            "Database\Factories\": "database/factories/",
            "Database\Seeders\": "database/seeders/"
        }
    },

有什么帮助吗? :)

使用下面的代码

 namespace App\Services\Stripe;

 use App\Services\Stripe\StripeServiceProvider::class

在您的评论中,您发布了一个错误:

Class App\Services\Stripe\StripeServiceProvider located in ./app/Services /Stripe/StripeServiceProvider.php does not comply with psr-4 autoloading standard. Skipping.

我注意到 ./app/Services /Stripe 中多了一个 space。

也许您创建了 Services / 目录并在末尾添加了 space。

一些改进是将 app\ 重命名为 App\ 并从 composer.json 中删除 "Services\": 行。 运行 composer dump-autoload 经过这些更改。