vanthao03596 / laravel-package-tools
Laravel包创建工具
Requires
- php: ^7.3|^8.0
- illuminate/contracts: ^6.0|^7.0|^8.0
- mockery/mockery: ^1.4
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^9.3
- spatie/test-time: ^1.2
README
此包包含一个PackageServiceProvider,您可以在您的包中使用它轻松注册配置文件、迁移等。
以下是如何使用它的示例。
use Vanthao03596\LaravelPackageTools\PackageServiceProvider; use Vanthao03596\LaravelPackageTools\Package; class YourPackageServiceProvider extends PackageServiceProvider { public function configurePackage(Package $package): void { $package ->name('your-package-name') ->hasConfigFile() ->hasViews() ->hasViewComposer('*', MyViewComposer::class) ->sharesDataWithAllViews('downloads', 3) ->hasTranslations() ->hasAssets() ->hasRoute('web') ->hasMigration('create_package_tables') ->hasCommand(YourCoolPackageCommand::class); } }
在底层,它将执行必要的操作来注册必要的内容,并使各种文件可发布。
入门指南
此包对您的包结构有意见。为了快速入门,请考虑使用我们的package-skeleton仓库来启动您的包。该骨架结构完美地与包中的PackageServiceProvider配合使用。
用法
在您的包中,您应该让您的服务提供者扩展Vanthao03596\LaravelPackageTools\PackageServiceProvider。
use Vanthao03596\LaravelPackageTools\PackageServiceProvider; use Vanthao03596\LaravelPackageTools\Package; class YourPackageServiceProvider extends PackageServiceProvider { public function configurePackage(Package $package) : void { $package->name('your-package-name'); } }
传递包名到name是强制性的。
处理配置文件
要注册配置文件,您应该在您的包的config目录中创建一个带有您的包名的php文件。在这个例子中,它应该在<package root>/config/your-package-name.php。
如果您的包名以laravel-开头,我们预计您的配置文件不包含该前缀。因此,如果您的包名是laravel-cool-package,配置文件应该命名为cool-package.php。
要注册该配置文件,请在configurePackage方法中对$package调用hasConfigFile()。
$package ->name('your-package-name') ->hasConfigFile();
hasConfigFile方法还将使配置文件可发布。您的包的用户将能够使用此命令发布配置文件。
php artisan vendor:publish --tag=your-package-name-config
如果您的包有多个配置文件,您可以将它们的名称作为数组传递给hasConfigFile
$package ->name('your-package-name') ->hasConfigFile(['my-config-file', 'another-config-file']);
处理视图
您的包提供的任何视图都应该放置在<package root>/resources/views目录中。
您可以使用hasViews命令注册这些视图。
$package ->name('your-package-name') ->hasViews();
这将注册您的视图到Laravel。
如果您有一个视图<package root>/resources/views/myView.blade.php,您可以像这样使用它:view('your-package-name::myView')。当然,您也可以使用子目录来组织您的视图。位于<package root>/resources/views/subdirectory/myOtherView.blade.php的视图可以使用view('your-package-name::subdirectory.myOtherView')使用。
调用hasViews还将使视图可发布。您的包的用户将能够使用此命令发布视图
php artisan vendor:publish --tag=your-package-name-views
与视图共享全局数据
您可以使用sharesDataWithAllViews方法与所有视图共享数据。这将使共享变量对所有视图可用。
$package ->name('your-package-name') ->sharesDataWithAllViews('companyName', 'Spatie');
处理Blade视图组件
您的包提供的任何Blade视图组件都应该放置在<package root>/Components目录中。
您可以使用hasViewComponents命令注册这些视图。
$package ->name('your-package-name') ->hasViewComponents('spatie', [Alert::class]);
这将注册您的视图组件到Laravel。在Alert::class的情况下,它可以在视图中引用为<x-spatie-alert />,其中spatie是在注册期间提供的名称前缀。
调用 hasViewComponents 也会使视图组件可发布,并将发布到 app/Views/Components/vendor/<package name>。
您的包的用户可以使用此命令发布视图组件
php artisan vendor:publish --tag=your-package-name-components
与视图编译器一起工作
您可以使用 hasViewComposers 方法注册项目中使用的任何视图编译器。您也可以注册一个接收 $view 参数的回调,而不是类名。
要注册所有视图的视图编译器,请使用视图名称 '*'。
$package ->name('your-package-name') ->hasViewComposer('viewName', MyViewComposer::class) ->hasViewComposer('*', function($view) { $view->with('sharedVariable', 123); });
与翻译一起工作
您的包提供的任何翻译都应放在 <package root>/resources/lang/<language-code> 目录中。
您可以使用 hasTranslations 命令注册这些翻译。
$package ->name('your-package-name') ->hasTranslations();
这将注册翻译到 Laravel。
假设您将此翻译文件保存在 <package root>/resources/lang/en/translations.php...
<?php return [ 'translatable' => 'translation', ];
...您的包和用户可以使用以下方式检索翻译
trans('your-package-name::translations.translatable'); // returns 'translation'
如果您的包名称以 laravel- 开头,那么您应该在上述示例中省略它。
使用翻译字符串作为键进行编码,您应该在 <package root>/resources/lang/<language-code>.json 中创建 JSON 文件。
例如,创建类似 <package root>/resources/lang/it.json 的文件
{
"Hello!": "Ciao!"
}
...的输出...
trans('Hello!');
...如果应用程序使用意大利语,则输出将是 Ciao!。
调用 hasTranslations 也会使翻译可发布。您的包的用户可以使用此命令发布翻译
php artisan vendor:publish --tag=your-package-name-translations
与资产一起工作
您的包提供的任何资产都应放在 <package root>/resources/dist/ 目录中。
您可以使用 hasAssets 方法使这些资产可发布。
$package ->name('your-package-name') ->hasAssets();
您的包的用户可以使用此命令发布资产
php artisan vendor:publish --tag=your-package-name-assets
这将把资产复制到应用程序中安装您的包的 public/vendor/<your-package-name> 目录中。
与迁移一起工作
PackageServiceProvider 假设任何迁移都放在此目录中:<package root>/database/migrations。在该目录内,您可以放置任何迁移。确保它们都具有 php.stub 扩展名。使用该扩展名将确保静态分析器在迁移发布时不会混淆存在于多个位置的类。
要注册您的迁移,您应将不带扩展名的名称传递给 hasMigration 表。
如果您的迁移文件名为 create_my_package_tables.php.stub,您可以这样注册它们
$package ->name('your-package-name') ->hasMigration('create_my_package_tables');
如果您的包包含多个迁移文件,您只需多次调用 hasMigration 或使用 hasMigrations。
$package ->name('your-package-name') ->hasMigrations(['my_package_tables', 'some_other_migration']);
调用 hasMigration 也会使迁移可发布。您的包的用户可以使用此命令发布迁移
php artisan vendor:publish --tag=your-package-name-migrations
如预期的那样,发布的迁移文件将带有当前日期和时间的前缀。
注册命令
您可以使用 hasCommand 函数注册您的包提供的任何命令。
$package ->name('your-package-name') ->hasCommand(YourCoolPackageCommand::class);
如果您的包提供多个命令,您可以使用 hasCommand 多次调用,或者将数组传递给 hasCommands
$package ->name('your-package-name') ->hasCommands([ YourCoolPackageCommand::class, YourOtherCoolPackageCommand::class, ]);
与路由一起工作
PackageServiceProvider 假设任何路由文件都放在此目录中:<package root>/routes。在该目录内,您可以放置任何路由文件。
要注册您的路由,您应将不带扩展名的名称传递给 hasRoute 方法。
如果您的路由文件名为 web.php,您可以这样注册它们
$package ->name('your-package-name') ->hasRoute('web');
如果您的包包含多个路由文件,您只需多次调用 hasRoute 或使用 hasRoutes。
$package ->name('your-package-name') ->hasRoutes(['web', 'admin']);
使用生命周期钩子
您可以将任何自定义逻辑放在以下方法之一中以在启动时执行
registeringPackage:在PackageServiceProvider的register方法的开始时调用packageRegistered:在PackageServiceProvider的register方法的末尾调用bootingPackage:将在PackageServiceProvider的boot方法开始时调用packageBooted:将在PackageServiceProvider的boot方法结束时调用
测试
composer test
变更日志
有关最近变更的更多信息,请参阅 变更日志
贡献
有关详细信息,请参阅 贡献指南
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件