mvnrsa/laravel-sluggable-trait

这是一个可以应用于 Eloquent 模型以在保存时自动生成 slugs 的特性。在 martinbean/laravel-sluggable-trait 的基础上进行了一些改进,使用下划线(或任何其他字符)代替斜杠作为 slugs。

0.3.2 2022-05-01 13:50 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:46 UTC


README

可以将此特性应用于 Eloquent 模型,以便在保存时自动生成 slugs。
这是对 martinbean/laravel-sluggable-trait 的一点点改进,允许将 slug 字符从斜杠更改为下划线(默认)或您选择的任何字符。

安装

$ composer require mvnrsa/laravel-sluggable-trait

用法

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use mvnrsa\Database\Eloquent\Sluggable;

class Item extends Model
{
    use Sluggable;
}

默认情况下,该特性假定您的数据库有两列:nameslug。如果您需要更改这些,可以重写 getter 方法

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use mvnrsa\Database\Eloquent\Sluggable;

class Item extends Model
{
    use Sluggable;

    public function getSlugColumnName()
    {
        return 'seo_title';
    }

    public function getSluggableString()
    {
        return 'headline';
    }

    /* Optional */
    public function getSlugCharacter()
    {
        return '_';
    }
}

getSlugColumnName() 方法应该返回您希望在数据库表中存储 slugs 的列名。

getSluggableString() 应该返回您希望从中创建 slug 的字符串。这是一个方法,而不是属性或常量,因为您可能希望从多个列的值中创建一个 slug。例如

/**
 * Create a string based on the first and last name of a person.
 */
public function getSluggableString()
{
    return sprintf('%s %s', $this->first_name, $this->last_name);
}
/**
 * Create a string based on a formatted address string.
 */
public function getSluggableString()
{
    return implode(', ', array_filter([
        $this->street_address,
        $this->locality,
        $this->region,
        $this->postal_code,
        $this->country,
    ]));
}

getSlugCharacter() 应该返回您希望在 slugs 中使用的替换字符。
我的默认值是下划线 (_)

/**
 * Allows overriding the character used in slugs.
 */
public function getSlugCharacter()
{
	return '_';
}

许可证

根据 MIT 许可证 授权。