kiendaotac/laravel-package-tools

用于在我的CMS中创建Laravel包的工具

1.4.0 2021-02-15 08:10 UTC

This package is auto-updated.

Last update: 2024-09-27 18:19:40 UTC


README

Latest Version on Packagist Tests Total Downloads

此包包含一个 PackageServiceProvider,您可以在您的包中使用它来轻松注册配置文件、迁移等。

以下是一个使用示例。

use Spatie\LaravelPackageTools\PackageServiceProvider;
use Spatie\LaravelPackageTools\Package;

class YourPackageServiceProvider extends PackageServiceProvider
{
    public function configurePackage(Package $package): void
    {
        $package
            ->name('your-package-name')
            ->hasConfigFile()
            ->hasViews()
            ->hasTranslations()
            ->hasAssets()
            ->hasRoute('web')
            ->hasMigration('create_package_tables')
            ->hasCommand(YourCoolPackageCommand::class);
    }
}

在底层,它将执行必要的操作来注册所需的项目,并使各种文件可发布。

支持我们

我们投入了大量资源来创建一流的开放源代码包。您可以通过购买我们的付费产品之一来支持我们。

我们非常感谢您从家乡寄来明信片,说明您正在使用我们哪个包。您可以在我们的联系页面找到我们的地址。我们将在我们的虚拟明信片墙上发布所有收到的明信片。

入门

此包对您的包结构有意见。为了轻松开始,请考虑使用我们的package-skeleton存储库来启动您的包。该骨架结构得非常完美,可以与包中的PackageServiceProvider完美配合。

使用方法

在您的包中,应让您的服务提供程序扩展Spatie\LaravelPackageTools\PackageServiceProvider

use Spatie\LaravelPackageTools\PackageServiceProvider;
use Spatie\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

处理视图

您的包提供的任何视图都应放在<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

处理翻译

您的包提供的任何翻译都应放在<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- 开头,那么您应该在上面的示例中省略它。

调用 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:将在 PackageServiceProviderregister 方法开始时被调用
  • packageRegistered:将在 PackageServiceProviderregister 方法结束时被调用
  • bootingPackage:将在 PackageServiceProviderboot 方法开始时被调用
  • packageBooted:将在 PackageServiceProviderboot 方法结束时被调用

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

致谢

许可协议

麻省理工学院许可协议(MIT)。请参阅许可文件获取更多信息。