outerweb/filament-link-picker

此软件包向您的定义的路由或外部链接添加一个选择链接的字段。

v3.0.1 2024-05-20 22:20 UTC

This package is auto-updated.

Last update: 2024-09-20 23:13:47 UTC


README

Latest Version on Packagist Total Downloads

此软件包向您的定义的路由或外部链接添加一个选择链接的字段。它还添加了一个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
    }
}

本地化

链接选择器可以很好地处理本地化路由。要这样做,请遵循以下步骤

  1. 通过在您的路由上的filamentLinkPicker()方法中添加localized参数来将路由标记为 '已本地化'。
Route::get('/your-route', YourController::class)
    ->name('your-route')
    ->filamentLinkPicker(
        isLocalized: true
    );
  1. 通过向插件添加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方法。

  1. 通过向插件添加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_downloadopens_in_new_tab,只有当您在组件本身上没有指定它们时才会生效。如果您指定了它们,组件将使用指定的值。

<x-filament-link-picker-link :link="$link" download target="_self" />

在此,我们指定了downloadtarget属性。组件将使用这些值而不是链接选择器中的值。

更新日志

有关最近更改的更多信息,请参阅更新日志

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件