Laravel没有看到我的包裹

时间:2018-01-17 17:33:59

标签: php laravel

为我的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.phpAlexxosipov\Cart\CartServiceProvider::class,

并制作composer dump-autoload。但我仍然有一个错误:

FatalErrorException in ProviderRepository.php line 146:
Class 'Alexxosipov\Cart\CartServiceProvider' not found

我哪里出错了?

UPD:我文件系统的截图 enter image description here

2 个答案:

答案 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"
            }
        }
    }