apility/plugins

Laravel 插件架构

v0.0.2 2023-01-20 17:04 UTC

This package is auto-updated.

Last update: 2024-09-20 20:31:34 UTC


README

此包提供了一种简单的方法来使您的 Laravel 应用程序模块化。它实现了一个简单的插件架构,允许您创建插件并在共享仓库中注册它们。

然后,您可以通过接口或特性检测来使用已注册的插件。

插件是围绕 Laravel 服务提供者的抽象,因此您可以在插件中使用服务提供者的所有功能。

安装

您可以通过 composer 安装此包

composer require apility/plugins

用法

创建插件

要创建插件,您需要创建一个实现 Apility\Plugins\Contracts\Plugin 接口的类。

最简单的方法是扩展抽象的 Apility\Plugins\Plugin 类。

use Apility\Plugins\Plugin;

class MyPlugin extends Plugin
{
    public function register()
    {
        // Here you can perform any registration that
        // you would normally do in a service provider.
    }
}

注册插件

要注册插件,您需要将它们注册到插件仓库中。

插件仓库是一个单例,它实现了 Apility\Plugins\Contracts\PluginRepository 接口。

与仓库交互的推荐方法是使用 Apility\Plugins\Facades\Plugin 门面。

use Apility\Plugins\Facades\Plugin;

Plugin::register(MyPlugin::class);

使用插件

此包的主要目的是允许您通过特性检测在应用程序中使用插件。

您可以使用 Apility\Plugins\Facades\Plugin 门面根据特性(接口或特性)解析插件。

use Apility\Plugins\Facades\Plugin;
use Apility\Plugins\Plugin as BasePlugin;

interface MyFeature
{
    public function doSomething();
}

class MyPlugin extends BasePlugin implements MyFeature
{
    public function doSomething()
    {
        return 'Hello world!';
    }
}

$plugins = Plugin::all(MyFeature::class);

foreach ($plugins as $plugin) {
    /** @var MyFeature $plugin */
    echo $plugin->doSomething();
}

使用插件的其它方法

use Apility\Plugins\Facades\Plugin;

// Get the number of registered plugins
$pluginCount = Plugin::count();

// Get the number of registered plugins by type
$pluginCount = Plugin::count(MyPlugin::class);

// Check if a plugin is registered
$pluginRegistered = Plugin::has(MyPlugin::class);

// Get all plugins
$plugins = Plugin::all();

// Get all plugins by type
$plugins = Plugin::all(MyPlugin::class);

// Get the first registered plugin
$plugin = Plugin::first();

// Get a plugin by type
$plugin = Plugin::first(MyPlugin::class);

生成插件

您可以使用 make:plugin 命令来生成插件。

php artisan make:plugin MyPlugin

带有策略的插件生成

您可以使用 --policy 选项来生成带有相应策略的插件。

php artisan make:plugin MyPlugin --policy