问题描述
我正在尝试开发一个通过 Composer 本地安装的新 Laravel 包。
这些是我的步骤:
-
我用
安装了一个新的 Laravel 应用程序composer create-project laravel/laravel my-application
-
packages/randolf/custom-package/composer.json
{ "name": "randolf/custom-package","description": "My new Custom Package","type": "library","license": "MIT","require": {},"autoload": { "psr-4": { "Randolf\\CustomPackage\\" : "src/" } },"extra": { "laravel": { "providers": [ "Randolf\\CustomPackage\\CustomPackageServiceProvider" ],"aliases": { "CustomPackage": "Randolf\\CustomPackage\\Facades" } } } }
packages/randolf/custom-package/src/CustomPackage.PHP
<?PHP namespace Randolf\CustomPackage; class CustomPackage { public function sayHi() { return "Hi from class!"; } }
packages/randolf/custom-package/src/CustomPackageServiceProvider.PHP
<?PHP namespace Randolf\CustomPackage; use Illuminate\Support\ServiceProvider; class CustomPackageServiceProvider extends ServiceProvider { public function boot() { } public function register() { $this->app->bind('custom-package',function() { return new CustomPackage(); }); } }
packages/randolf/custom-package/src/Facades/CustomPackageFacade.PHP
<?PHP namespace Randolf\CustomPackage\Facades; use Illuminate\Support\Facades\Facade; class CustomPackageFacade extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'custom-package'; } }
-
我使用 composer 在 Laravel 中添加我的包,添加
repositories
键:/composer.json
"repositories": { "randolf/custom-package": { "type": "path","url": "packages/randolf/custom-package","options": { "symlink": true } } },"require": { ... "randolf/custom-package": "@dev" },
-
我运行
composer update
并且安装、包发现和转储自动加载工作正常:Loading composer repositories with package information Updating dependencies Lock file operations: 1 install,0 updates,0 removals - Locking randolf/custom-package (dev-master) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install,0 removals - Installing randolf/custom-package (dev-master): Junctioning from packages/randolf/custom-package Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @PHP artisan package:discover --ansi discovered Package: facade/ignition discovered Package: fideloper/proxy discovered Package: fruitcake/laravel-cors discovered Package: laravel/sail discovered Package: laravel/tinker discovered Package: nesbot/carbon discovered Package: nunomaduro/collision discovered Package: randolf/custom-package Package manifest generated successfully. 73 packages you are using are looking for funding. Use the `composer fund` command to find out more!
-
我在
routes/web.PHP
中创建了一条路线来测试外观:Route::get('/test-facade',function () { echo CustomPackage::sayHi(); });
解决方法
调整 composer.json
中的别名以指向 Facade 而不是其命名空间:
"CustomPackage": "Randolf\\CustomPackage\\Facades\\CustomPackageFacade"