在应用程序文件夹中使用 类 时如何修复命名空间错误?
How can I fix the namespace error when using classes within the app folder?
我正在将遗留 laravel 应用程序从 Laravel 5 升级到 8,并将 运行 升级到一堵砖墙。 None 我的服务提供商工作,我不明白为什么。
上一个结构
应用
-->服务
------>条纹
在每个服务提供商文件夹中,我将创建三个文件,如下所示:
- Stripe.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,但即使在转储 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
经过这些更改。
我正在将遗留 laravel 应用程序从 Laravel 5 升级到 8,并将 运行 升级到一堵砖墙。 None 我的服务提供商工作,我不明白为什么。
上一个结构
应用 -->服务 ------>条纹
在每个服务提供商文件夹中,我将创建三个文件,如下所示:
- Stripe.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,但即使在转储 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
经过这些更改。