digiservnet/laravel-package-tools

此包已被弃用且不再维护。未建议替代包。

创建Laravel包的工具

1.12.0 2022-03-14 10:38 UTC

README

Latest Version on Packagist Tests Total Downloads

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

以下是一个使用示例。

use Spatie\LaravelPackageTools\PackageServiceProvider;
use Spatie\LaravelPackageTools\Package;
use MyPackage\ViewComponents\Alert;

class YourPackageServiceProvider extends PackageServiceProvider
{
    public function configurePackage(Package $package): void
    {
        $package
            ->name('your-package-name')
            ->hasConfigFile()
            ->hasViews()
            ->hasViewComponent('spatie', Alert::class)
            ->hasViewComposer('*', MyViewComposer::class)
            ->sharesDataWithAllViews('downloads', 3)
            ->hasTranslations()
            ->hasAssets()
            ->hasRoute('web')
            ->hasMigration('create_package_tables')
            ->hasCommand(YourCoolPackageCommand::class);
    }
}

底层将执行必要的操作以注册必要的内容,并使所有类型的文件可发布。

支持我们

68747470733a2f2f6769746875622d6164732e73332e65752d63656e7472616c2d312e616d617a6f6e6177732e636f6d2f6c61726176656c2d7061636b6167652d746f6f6c732e6a70673f743d31

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

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

入门

此包对您应该如何构建您的包有自己的看法。要轻松开始,请考虑使用 我们的 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

如果您的包有多个配置文件,您可以将它们的名称作为数组传递给 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 方法。

$package
    ->name('your-package-name')
    ->hasViews('custom-view-namespace');

现在,您可以使用如下方式使用包中的视图

view('custom-view-namespace::myView');

发布视图

调用 hasViews 也会使视图可发布。您的包的用户可以使用以下命令发布视图

php artisan vendor:publish --tag=your-package-name-views

与视图共享全局数据

您可以使用 sharesDataWithAllViews 方法与所有视图共享数据。这将使共享变量对所有视图可用。

$package
    ->name('your-package-name')
    ->sharesDataWithAllViews('companyName', 'Spatie');

使用 Blade 视图组件

您的包提供的任何 Blade 视图组件都应该放在 <package root>/src/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。在这个目录内部,您可以放置任何迁移文件。

要注册您的迁移,您应该将不带扩展名的迁移名称传递给 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 许可证 (MIT)。有关更多信息,请参阅 许可证文件