【发布时间】:2023-02-02 04:03:10
【问题描述】:
我正在将旧版 Laravel 应用程序从 Laravel 5 升级到 Laravel 8,但遇到了麻烦。我的服务提供商都没有工作,我也不知道为什么。
以前的结构
应用程序 -->服务 ------>条纹
在每个服务提供商文件夹中,我将创建三个文件,如下所示:
- 条纹.php
- StripeFacade.php
- 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 中,但似乎没有任何成功,即使在转储配置和自动加载之后也是如此。
"autoload": { "psr-4": { "App\\": "app/", "Services\\": "app/Services", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } },有帮助吗? :)
【问题讨论】:
-
尝试命名空间
App而不是app。 -
@RonvanderHeijden 早些时候尝试过。又做了一遍,现在报错
Class "App\Services\Stripe\StripeServiceProvider" not found -
更改名称后,在 CLI 中运行
composer du。 -
在 CLI 中运行 composer dump-autoload
-
@josezenem 控制台中的警告是
Class App\Services\Stripe\StripeServiceProvider located in ./app/Services /Stripe/StripeServiceProvider.php does not comply with psr-4 autoloading standard. Skipping.其他 Stripe 文件收到类似的警告。