Laravel 5从供应商处加载自定义软件包

时间:2019-07-31 20:12:07

标签: laravel composer-php

我正在尝试从供应商文件中将一个自定义程序包(lapisraro/autocrud)加载到我的项目中,但出现此错误:

  

“找不到类'Lapisraro \ Autocrud \ AutocrudServiceProvider'”

这是我的应用程序的composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "lapisraro/autocrud": "dev-master",
        "laravel/framework": "5.8.*",
        "laravel/tinker": "^1.0"
    },
    "require-dev": {
        "beyondcode/laravel-dump-server": "^1.0",
        "filp/whoops": "^2.0",
        "fzaninotto/faker": "^1.4",
        "jeroen-g/laravel-packager": "^2.2",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpunit/phpunit": "^7.5"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Lapisraro\\Autocrud\\": "/lapisraro/autocrud/src"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

这是我在vendor / lapisraro / autocrud中的composer.json

  {
    "name": "lapisraro/autocrud",
    "description": "Gerador de CRUD padrão da LapisRaro",
    "license": "MIT",
    "type": "library",
    "authors": [
        {
          "name": "Lucas Campos",
          "email": "lucasblind@gmail.com"
        }
      ],
    "minimum-stability": "dev",
    "autoload": {
      "psr-4": {
          "Lapisraro\\Autocrud\\": "src/"
      },
      "classmap": [
          "database/seeds",
          "database/factories"
      ]
    },
    "autoload-dev": {
      "psr-4": {
          "Tests\\": "tests/",
          "Lapisraro\\Autocrud\\": "src/"
      }
  },
    "extra": 
    {
      "laravel": 
      {
          "providers": [ "Lapisraro\\autocrud\\AutocrudServiceProvider" ]
      }
    }
  }

这是我的服务提供商

<?php
    // MyVendor\contactform\src\ContactFormServiceProvider.php
    namespace Lapisraro\autocrud;

    use Illuminate\Support\ServiceProvider;


    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Route;
    use Illuminate\Support\Facades\Storage;
    use Yajra\DataTables\Facades\DataTables;
    //use Intervention\Image\Facades\Image;
    //use App\Models\Image as ImgModel;

    class AutocrudServiceProvider extends ServiceProvider {
        /**
         * boot
         *
         * Initialize provider
         * 
         * @return void
         */
        public function boot()
        {
            $this->loadRoutesFrom(__DIR__.'/routes/web.php');
            $this->loadViewsFrom(__DIR__.'/resources/views', 'autocrud');
        }

        /**
         * register
         *
         * Register the service provider for the dependency.
         * 
         * @return void
         */
        public function register()
        {
            $this->loadRoutesFrom(__DIR__.'/routes/web.php');
            $this->loadViewsFrom(__DIR__.'/resources/views', 'autocrud');

            //App::register(AutocrudServiceProvider::class);
        }

    }
    ?>

我还尝试将其加载到config / app.php中:

Lapisraro\Autocrud\AutocrudServiceProvider::class,

以及我的包裹https://packagist.org/packages/lapisraro/autocrud

的链接

2 个答案:

答案 0 :(得分:0)

与其在应用程序的PSR-4中自动加载composer.json,不如:

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Lapisraro\\Autocrud\\": "/lapisraro/autocrud/src"
    },

...像这样将本地包添加到repositories

"repositories": [
    {
        "type": "path",
        "url": "/lapisraro/autocrud"
    }
]

随后运行composer updatecomposer dump-autoload

答案 1 :(得分:0)

我放弃了,并试图用laravel-packager来制作,但是也没有用, 但是我发现了这部视频https://www.youtube.com/watch?v=H-euNqEKACA,现在可以正常播放了。

问题出在作曲家的文件和文件夹级别。

感谢您的帮助!