outerweb / filament-link-picker
此软件包向您的定义的路由或外部链接添加一个选择链接的字段。
Requires
- php: ^8.0
- filament/filament: ^3.2
- laravel/framework: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.16
README
此软件包向您的定义的路由或外部链接添加一个选择链接的字段。它还添加了一个blade组件来渲染链接。
特性
链接选择器字段将显示以下选项
- 所有标记为链接选择器发现的应用程序路由列表。
- 外部链接选项,用于添加到外部网站的链接。(可以禁用)
- 电子邮件链接选项,用于添加mailto链接。(可以禁用)
- 电话链接选项,用于添加tel链接。(可以禁用)
链接选择器将自动显示和绑定所选路由的参数。这包括
- 由路由模型绑定提供动力的选择字段,用于自动显示可用的模型。
- 用于所有其他参数的文本输入字段。
- 外部链接选项的URL输入字段。
- 电子邮件链接选项的电子邮件输入字段。
- 电话链接选项的电话输入字段。
链接选择器还可以显示路由选项
is_download
指定链接是否为下载链接。opens_in_new_tab
指定链接是否应在新标签页中打开。
可以使用 <x-filament-link-picker-link />
blade组件来渲染链接。
安装
您可以通过composer安装此软件包
composer require outerweb/filament-link-picker
将插件添加到您想要的Filament面板
use OuterWeb\FilamentLinkPicker\Filament\FilamentLinkPicker; class FilamentPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel // ... ->plugins([ FilamentLinkPickerPlugin::make(), ]); } }
配置
禁用外部链接选项
您可以通过在插件中添加disableExternalLinks
方法来禁用外部链接选项。
FilamentLinkPickerPlugin::make() ->disableExternalLinks();
禁用电子邮件链接选项
您可以通过在插件中添加disableMailto
方法来禁用电子邮件链接选项。
FilamentLinkPickerPlugin::make() ->disableMailto();
禁用电话链接选项
您可以通过在插件中添加disableTel
方法来禁用电话链接选项。
FilamentLinkPickerPlugin::make() ->disableTel();
禁用“下载”选项
您可以通过在插件中添加disableDownload
方法来禁用“下载”选项。
FilamentLinkPickerPlugin::make() ->disableDownload();
禁用“在新标签页中打开”选项
您可以通过在插件中添加disableOpenInNewTab
方法来禁用“在新标签页中打开”选项。
FilamentLinkPickerPlugin::make() ->disableOpenInNewTab();
多语言支持
您可以通过在插件中添加translateLabels
方法来启用多语言支持。
FilamentLinkPickerPlugin::make() ->translateLabels();
以下项目可以翻译
- label: 在
filamentLinkPicker()
方法中定义的路由的标签。 - group: 在
filamentLinkPicker()
方法中定义的路由的组。 - 参数标签: 在
filamentLinkPicker()
方法中定义的参数的标签。
要这样做,只需将值设置为翻译键。
Route::get('/your-route/{parameter}', YourController::class) ->name('your-route') ->filamentLinkPicker( label: 'your-route.label', group: 'your-route.group', parameterLabels: [ 'parameter' => 'your-route.parameter', ] );
用法
设置路由
您可以通过向路由添加filamentLinkPicker()
方法来标记路由供链接选择器发现。
use Illuminate\Support\Facades\Route; Route::get('/your-route', YourController::class) ->name('your-route') ->filamentLinkPicker();
自定义路由标签
路由标签将用于链接选择器的下拉列表。您可以通过将标签作为参数传递给filamentLinkPicker()
方法来自定义标签。
Route::get('/your-route', YourController::class) ->name('your-route') ->filamentLinkPicker( label: 'Your custom label' );
默认情况下,标签将是路由的名称。如果路由名称包含点,则它们将被替换为'>'。
自定义路由组
该组将用于将链接选择器的下拉菜单中的路由分组。您可以通过将组作为参数传递给filamentLinkPicker()
方法来自定义组。
Route::get('/your-route', YourController::class) ->name('your-route') ->filamentLinkPicker( group: 'Your custom group' );
将路由标记为 '已本地化'
将路由标记为 '已本地化' 将使链接选择器合并该路由的所有本地化版本。当您拥有多语言环境且不同语言有相同的路由时,这非常有用,这样链接选择器就不会多次显示相同的路由。有关更多信息,请参阅本地化部分。
Route::get('/your-route', YourController::class) ->name('your-route') ->filamentLinkPicker( isLocalized: true );
定义特定的参数标签
您可以通过将数组传递给filamentLinkPicker()
方法来为路由定义特定的参数标签。这些标签将用作链接选择器中参数输入字段的标签。
Route::get('/your-route/{parameter}', YourController::class) ->name('your-route') ->filamentLinkPicker( parameterLabels: [ 'your-parameter' => 'Your parameter label' ] );
定义特定的参数选项
您可以通过将数组传递给filamentLinkPicker()
方法来为路由定义特定的参数选项。这些选项将用作链接选择器中参数选择字段的选项。
Route::get('/your-route/{parameter}', YourController::class) ->name('your-route') ->filamentLinkPicker( parameterOptions: [ 'your-parameter' => [ 'option1' => 'Option 1', 'option2' => 'Option 2', ] ] );
显式定义数据库中存储值的列名
默认情况下,该软件包将使用$model->getKey()
方法将参数的选择值存储在数据库中。如果您想将值存储在不同的列中,可以将列名作为参数传递给filamentLinkPicker()
方法。
Route::get('/event/{event:slug}', 'show')->name('show')->filamentLinkPicker( label: 'Single Event', group: 'Details Page', parameterModelKeys: [ 'event' => 'slug', ] );
设置路由模型绑定
默认支持路由模型绑定。链接选择器将自动在参数选择字段中显示可用的模型。它将模型的主键保存到数据库中。
默认情况下,我们将遍历以下属性以自动查找模型的标签
- 标签
- 名称
- 标题
如果这些属性中都没有找到,则应用程序将抛出异常。
显式定义模型的标签
您可以通过向模型添加一个getLinkPickerLabel
方法来显式定义模型的标签。
class YourModel extends Model { public function getLinkPickerLabel(): string { return $this->your_attribute; } }
或者,您可以在模型上定义标签作为属性。
class YourModel extends Model { public string $linkPickerLabel = 'your_attribute'; }
过滤可用的模型
您可以通过向模型添加一个scopeLinkPickerOptions
方法来过滤可用的模型。然后,此作用域将被应用于模型的查询,以获取选择字段的可用选项。
class YourModel extends Model { public function scopeLinkPickerOptions(Builder $query): void { // Your query here } }
本地化
链接选择器可以很好地处理本地化路由。要这样做,请遵循以下步骤
- 通过在您的路由上的
filamentLinkPicker()
方法中添加localized
参数来将路由标记为 '已本地化'。
Route::get('/your-route', YourController::class) ->name('your-route') ->filamentLinkPicker( isLocalized: true );
- 通过向插件添加
combineLocalizedRoutesUsing
方法来配置链接选择器应如何组合本地化路由。
use Outerweb\FilamentLinkPicker\Entities\LinkPickerRoute; FilamentLinkPickerPlugin::make() ->combineLocalizedRoutesUsing(function (LinkPickerRoute $route): LinkPickerRoute { // Imagine your routes are named like `en.your-route` and `nl.your-route` // We want to combine these routes so that the link picker only shows one option for `your-route` return $route->name(Str::after($route->name(), '.')); });
默认情况下,软件包将通过删除名称中第一个点之前的部分来组合本地化路由。如果您想使用此行为,则不需要指定combineLocalizedRoutesUsing
方法。
- 通过向插件添加
buildLocalizedRouteUsing
方法来配置链接选择器应如何构建本地化路由。
use Outerweb\FilamentLinkPicker\Entities\LinkPickerRoute; FilamentLinkPickerPlugin::make() ->buildLocalizedRouteUsing(function (string $name, array $parameters = [], bool $absolute = true, ?string $locale = null): ?string { // If you use our `outerweb/localization` package, // You can use the `localizedRoute` helper. return localizedRoute($name, $parameters, $absolute, $locale); });
作为后备,当您未指定回调函数时,如果已安装,链接选择器将使用outerweb/localization
软件包来构建本地化路由。此软件包提供了一个localizedRoute
辅助函数,您可以在应用程序中使用它。有关此软件包的更多信息,请在此处阅读。
使用实际值
要使用链接的实际值,您可以将模型中的属性强制转换为类,或使用外观。
强制转换
您可以将模型属性强制转换为Outerweb\FilamentLinkPicker\Entities\Link
类,以利用实体的属性和方法。
use Outerweb\FilamentLinkPicker\Casts\LinkCast; class YourModel extends Model { protected $casts = [ 'link' => LinkCast::class, ]; }
使用外观
您可以使用Outerweb\FilamentLinkPicker\Facades\LinkPicker
外观将值强制转换为Link
实体。
use Outerweb\FilamentLinkPicker\Facades\LinkPicker; $link = LinkPicker::dataToLinkEntity(array $data);
渲染链接
您可以使用<x-filament-link-picker-link />
组件来渲染链接。
<x-filament-link-picker-link :link="$link"> Your label here </x-filament-link-picker-link>
链接选择器的选项,如is_download
和opens_in_new_tab
,只有当您在组件本身上没有指定它们时才会生效。如果您指定了它们,组件将使用指定的值。
<x-filament-link-picker-link :link="$link" download target="_self" />
在此,我们指定了download
和target
属性。组件将使用这些值而不是链接选择器中的值。
更新日志
有关最近更改的更多信息,请参阅更新日志。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。