为我的laravel应用创建一个包(购物车)。获得服务提供商 - CartServiceProvider
,属于名称空间Alexxosipov\Cart
。
<?php
namespace Alexxosipov\Cart;
use Illuminate\Support\ServiceProvider;
use Alexxosipov\Cart\Cart as Cart;
class CartServiceProvider extends ServiceProvider {
public function boot() {
}
public function register() {
$this->app->singleton('cart', function() {
return new Cart();
});
}
}
然后,我在root composer.json
中创建了新的命名空间:
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Alexxosipov\\Сart\\": "packages/alexxosipov/cart/src"
}
}
我将其添加到providers
中的数组app.php
:
Alexxosipov\Cart\CartServiceProvider::class,
并制作composer dump-autoload
。但我仍然有一个错误:
FatalErrorException in ProviderRepository.php line 146:
Class 'Alexxosipov\Cart\CartServiceProvider' not found
我哪里出错了?
答案 0 :(得分:1)
尝试:
"Alexxosipov\\": "packages/alexxosipov/"
而不是:
"Alexxosipov\\Сart\\": "packages/alexxosipov/cart/"
然后...将serviceProvider类保存在“packages / alexxosipov / cart /”中,运行compose dumpautoload
命令并更新服务提供商:
<?php
namespace Alexxosipov\Cart;
use Illuminate\Support\ServiceProvider;
use Alexxosipov\Cart\Cart as Cart;
class CartServiceProvider extends ServiceProvider {
public function boot() {}
public function register() {
$this->app->singleton('cart', function() {
return new Cart();
});
}
}
这必须正常工作。
答案 1 :(得分:0)
您也可以尝试此。 在composer.json文件中为您的软件包添加 extra 键值部分,有助于使用Laravel类自动发现。 https://laravel-news.com/package-auto-discovery
"autoload": {
"psr-4": {
"App\\": "app/",
"Folder\\SubFolder\\": "src"
}
},
"extra": {
"laravel": {
"providers": [
"Folder\\SubFolder\\ClassNameServiceProvider"
],
"aliases": {
"Nickname": "Folder\\SubFolder\\Facades\\ClassName"
}
}
}