flagstudio/nova-sluggable

Laravel Nova 的 Slug 字段

1.2.7 2024-02-28 07:00 UTC

This package is not auto-updated.

Last update: 2024-09-26 08:06:00 UTC


README

Latest Version on Packagist

为 Laravel Nova 生成的 Slug 字段,在输入时可以生成唯一的 slug。

nova-sluggable demo

安装

您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包

composer require drobee/nova-sluggable

用法

向您的 Nova 资源添加一个新的 SluggableText 和一个 Slug 字段

use Drobee\NovaSluggable\SluggableText;
use Drobee\NovaSluggable\Slug;

class User extends Resource
{
    // ...

    public function fields(Request $request)
    {
        return [
            // ...

            SluggableText::make('Title'),
            Slug::make('Slug'),

            // ...
        ];
    }
}

当用户在 SluggableText 字段中输入字符串时,值将被发送到 API 生成 slug,然后将其设置为 Slug 字段的值。slug 在每次 keyup 事件时更新,但也可以绑定到标题字段的 blur 事件。

默认情况下,它寻找名为 "Slug" 的 Slug 类型字段。

为了正常工作,每个定义的 SluggableText 字段都需要一个相应的 Slug 字段。

选项

具有自定义名称的 Slug 字段

使用 slug() 方法在 SluggableText 字段上设置 Slug 字段的名称

SluggableText::make('Title')->slug('SEO Title');
Slug::make('SEO Title', 'slug');

语言

使用 slugLanguage() 方法设置用于生成的语言

Slug::make('Slug')->slugLanguage('hu');

默认值: en

最大长度

使用 slugMaxLength() 方法限制生成的 slug 的最大长度

Slug::make('Slug')->slugMaxLength(100);

默认值: 255

最大长度

使用 slugSeparator() 方法设置所有空格将被替换成的字符串

Slug::make('Slug')->slugSeparator('.');

默认值: -

注意:由于添加了使它唯一的后缀,生成的 slug 可能会比指定的值长几个字符。

更新事件

默认情况下,slug 在每次 keyup 事件时更新,但您可以将它绑定到 blur 事件

Slug::make('Slug')->event('blur');

接受值: keyup, blur

默认值: keyup

唯一 slug 和 Eloquent 模型

除非您在 Slug 字段上调用 slugUnique() 方法,否则生成的 slugs 不会是唯一的。

您还需要指定生成器应使用哪个 Eloquent 模型来生成唯一的 slug,通过调用 slugModel() 方法。在大多数情况下,您希望使用与您的资源相同的 Eloquent 模型。要做到这一点,请使用资源的静态 $model 属性调用该方法。

Slug::make('Slug')
    ->slugUnique()
    ->slugModel(static::$model);

当这两个选项被设置时,生成的 slug 将在设置的模型及其 Slug 字段属性值的基础上是唯一的。

Spatie\Sluggable 一起使用

如果指定的 Eloquent 模型使用 Spatie\SluggableHasSlug 特性并实现了其 getSlugOptions() 方法,则无需设置分隔符、最大长度或语言。在这种情况下,生成器将使用您在模型上设置的值。

变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

安全

如果您发现任何安全相关的问题,请通过电子邮件 robi@dpb.hu 而不是使用问题跟踪器。

致谢

许可

MIT 许可证 (MIT)。请参阅 许可文件 了解更多信息。

鸣谢

特别感谢