为 Laravel 包创建安装程序命令

2022-10-06  本文已影响0人  追梦人在路上不断追寻

在 Laravel 生态系统中使用包的乐趣之一是它们的安装非常容易。可以使用 Composer 拉入包,Laravel 会自动发现它们。

在这篇文章中,您将学习如何轻松添加install命令,使包用户更容易开始使用包。

常用包命令

php artisan vendor:publish --tag=awesome-package-config

php artisan vendor:publish --tag=awesome-package-migrations

php artisan vendor:publish --tag=awesome-package-assets

有些包会做得更好一点。例如,Laravel Horizon 有一个漂亮的安装命令,它将:

快速创建包命令

class BackupServiceProvider extends ServiceProvider
{
   public function boot()
     {
         $this->publishes([
             __DIR__.'/../config/backup.php' => config_path('backup.php'),
         ], 'config');

         $this->publishes([
             __DIR__.'/../resources/lang' => "{$this->app['path.lang']}/vendor/backup",
         ]);

         $this->loadTranslationsFrom(__DIR__.'/../resources/lang/', 'backup');
     }

     public function register()
     {
         $this->mergeConfigFrom(__DIR__.'/../config/backup.php', 'backup');
         
         $this->app->bind('command.backup:run', BackupCommand::class);
         $this->app->bind('command.backup:clean', CleanupCommand::class);
         $this->app->bind('command.backup:list', ListCommand::class);
         $this->app->bind('command.backup:monitor', MonitorCommand::class);
         
             $this->commands([
             'command.backup:run',
             'command.backup:clean',
             'command.backup:list',
             'command.backup:monitor',
         ]);
}

在最新版本的 laravel-package-tools 中,我们添加了新功能来为你的包添加安装程序。这就是你可以做到的方式。

class YourServiceProvider extends PackageServiceProvider
 {
     public function configurePackage(Package $package): void
     {
         $package
             ->name('your-package')
             ->hasConfigFile()
             ->hasTranslations()
             ->hasCommands([
                 BackupCommand::class,
                 CleanupCommand::class,
                 ListCommand::class,
                 MonitorCommand::class,
             ])
             ->hasInstallCommand(function(InstallCommand $command) {
                $command
                    ->publishConfigFile()
                    ->publishMigrations()
                    ->askToRunMigrations()
                    ->copyAndRegisterServiceProviderInApp()
                    ->askToStarRepoOnGitHub();
            });
     }
 }

使用此代码,您的软件包将获得一个安装命令,该命令将:

上一篇 下一篇

猜你喜欢

热点阅读