核心概念 - 插件
开始
概述
虽然 Filament 几乎提供了构建出色应用程序所需的任何工具,但有时你需要添加自己的功能,供自己应用或者作为发行包让其他开发人员也可以在他们的应用程序使用。这就是为什么 Filament 提供了一个插件系统,允许你扩展其功能。
在我们深入研究之前,了解插件可以使用的不同语境是很重要的。主要有两种情况:
- 面板插件(Panel Plugin): 指的是用在后台面板中的插件。它们通常只用来在面板内部添加功能或者作为作为一个面板完整使用。示例:
- 以 Widget 的形式为仪表板添加特定功能的插件。
- 为应用程序添加一套资源/功能(如博客或用户管理功能)的插件。
- 独立插件(Standalone Plugins): 这些插件可以在面板生成器之外的任何上下文中使用。例如:
尽管在构建插件时需要记住这两种不同的语境,但它们可以在同一插件中一起使用。它们不必相互排斥。
重要概念
在我们深入研究构建插件的细节之前,有几个概念需要理解。在构建插件之前,您应该熟悉以下内容:
Plugin 对象
Filament v3 引入了一个 Plugin 对象的概念,用于配置插件。此对象是一个简单的 PHP 类。它实现了 Filament\Contracts\Plugin
接口。该类用于配置插件,而且是插件的主入口。也用作注册插件中可能使用的资源及图标。
虽然 plugin 对象十分有用,创建该对象却不是必须的。你仍然可以不使用 plugin 对象来创建插件,参考创建面板插件教程。
Info Plugin 对象只用于 Panel Providers。独立插件不使用该对象。所有独立插件的配置应该在插件的服务提供者中处理。
注册资源
所有的资源注册,包括 CSS、JS 和 Alpine 组件,应该在插件服务提供者的 packageBooted()
方法中实现。它允许 Filament 使用资源管理器注册资源并在需要时加载。
创建插件
虽然你可以从头创建插件,我们建议你使用 Filament Plugin Skeleton 来快速开始。这个模板包括所有必要的样板,让你快速启动和运行。
使用
要使用该模板,只需跳转到 GitHub 仓库并单击 "Use this template" 按钮。这将在你帐户中创建一个带有样板代码的新仓库。之后,你可以将仓库克隆到机器上。当你的机器上有了该代码后,请导航到项目的根目录并运行以下命令:
php ./configure.php
这一操作会询问你一系列问题,以配置插件。当你回答完所有问题后,脚本就会使用模板创建一个新插件,你就可以开始创建新插件了。
升级现有插件
由于每个插件的使用范围和功能都有很大差异,因此没有一种一刀切的方法来升级现有插件。然而,需要注意的一点是,所有插件都一致地弃用了 PluginServiceProvider
。
在插件服务提供者中,需要更改它以继承 PackageServiceProvider。你还需要向服务提供者添加一个静态 $name
属性。此属性用于向 Filament 注册插件。以下是服务提供商可能的示例:
class MyPluginServiceProvider extends PackageServiceProvider{ public static string $name = 'my-plugin'; public function configurePackage(Package $package): void { $package->name(static::$name); }}
有用链接
在升级插件之前,请完整阅读本指南。它将帮助你理解这些概念以及如何构建插件。
Edit on GitHubStill need help? Join our Discord community or open a GitHub discussion