Laravel 5.2找不到自定义提供程序

时间:2015-12-23 08:22:25

标签: laravel packages provider

我正在使用laravel 5.2并尝试创建自己的包,所以我创建了我的包文件夹,这是我的目录:

root
-packages
--yudijohn
---composer.json
---crud-generator
----src
-----CrudGeneratorServiceProvider.php

这是我的composer.json的内容,我用composer init创建了我

{
    "name": "yudijohn/crud-generator",
    "description": "Laravel 5 Crud Generator",
    "require": {
        "php": ">=5.5.9",
        "laravelcollective/html": "5.1.*"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "Yudi Yohanes Septian Gotama",
            "email": "yudijohn.sg@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "yudijohn\\CrudGenerator\\": "packages/yudijohn/crud-generator/src"
        }
    }
}

并在app / Provide.php

添加提供商设置
App\Providers\PackageServiceProvider::class,
yudijohn\CrudGenerator\CrudGeneratorServiceProvider::class,

这是我的CrudGeneratorServiceProvide.php

的内容

namespace yudijohn\CrudGenerator;

use Illuminate\Support\ServiceProvider;

class CrudGeneratorServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
        $this->commands(
            'yudijohn\CrudGenerator\Commands\CrudCommand',
            'yudijohn\CrudGenerator\Commands\CrudControllerCommand',
            'yudijohn\CrudGenerator\Commands\CrudModelCommand',
            'yudijohn\CrudGenerator\Commands\CrudMigrationCommand',
            'yudijohn\CrudGenerator\Commands\CrudViewCommand'
        );
    }
}

但是当我尝试php artisan serve时,会出现此错误

[Symfony\Component\Debug\Exception\FatalErrorException]                
Class 'yudijohn\CrudGenerator\CrudGeneratorServiceProvider' not found

我不知道为什么找不到课程?我该怎么做才能解决这个错误? 请有人帮帮我

这是PackageServiceProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Symfony\Component\Finder\Finder;

use Illuminate\Filesystem\Filesystem;

class PackageServiceProvider extends ServiceProvider {

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
            $this->loadAutoloader(base_path('packages'));
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        //
        }

        /**
        * Require composer's autoload file the packages.
        *
        * @return void
        **/
        protected function loadAutoloader($path)
        {
            $finder = new Finder;
            $files = new Filesystem;

            $autoloads = $finder->in($path)->files()->name('autoload.php')->depth('<= 3')->followLinks();

        foreach ($autoloads as $file)
        {
            $files->requireOnce($file->getRealPath());
        }
        }

}

1 个答案:

答案 0 :(得分:2)

您要添加 "yudijohn\\CrudGenerator\\": "packages/yudijohn/crud-generator/src"项目根目录的composer.json,而不是您刚刚创建的包。它应该在"App\\": "app/"条目下方。

之后,运行composer dump-autoload将其添加到作曲家的自动加载课程中。

我也不相信你需要PackageServiceProvider.php,当你使用作曲家时添加另一个自动加载器似乎是多余的。

另外请确保您的文件名和类名相同,当您的班级名称为CrudGeneratorServiceProvide.php时提及CrudGeneratorServiceProvider(请注意类名末尾的r)

这是进一步研究的良好资源:https://github.com/jaiwalker/setup-laravel5-package