Class yii\behaviors\SluggableBehavior

继承yii\behaviors\SluggableBehavior » yii\behaviors\AttributeBehavior » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/behaviors/SluggableBehavior.php

SluggableBehavior 自动使用可以在 URL 中使用的 slug 值填充指定的属性.

Note: 此行为依赖于 php-intl 扩展进行音译. 如果没有安装它, 将会回退到 yii\helpers\Inflector::$transliteration 中定义的替换.

要使用 SluggableBehavior, 请将以下代码插入 ActiveRecord 类:

use yii\behaviors\SluggableBehavior;

public function behaviors()
{
    return [
        [
            'class' => SluggableBehavior::className(),
            'attribute' => 'title',
            // 'slugAttribute' => 'slug',
        ],
    ];
}

默认情况下, SluggableBehavior 会在对相关 AR 对象进行验证时使用一个可以在 URL 中使用的slug的值填充slug属性.

由于属性值将由此行为自动设置, 因此它们通常不是用户输入的, 因此不应该被验证, 即slug属性不应该出现在模型的 rules() 方法中.

如果你的属性名称不同, 则可以配置 $slugAttribute 属性, 如下所示:

public function behaviors()
{
    return [
        [
            'class' => SluggableBehavior::className(),
            'slugAttribute' => 'alias',
        ],
    ];
}

公共属性

隐藏继承的属性

属性类型描述定义在
$attribute string|array|null 属性或属性列表, 其值将被转换成slugnull, 这意味着$value属性将用于生成slug值. yii\behaviors\SluggableBehavior
$attributes array 要通过 $value 指定的值自动填充的属性列表. yii\behaviors\AttributeBehavior
$ensureUnique boolean 是否确保生成的slug值在所有者类记录中是唯一的. yii\behaviors\SluggableBehavior
$immutable boolean 如果slug已经生成过, 是否保持不变. yii\behaviors\SluggableBehavior
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior
$preserveNonEmptyValues boolean 是否保留非空属性值. yii\behaviors\AttributeBehavior
$skipOnEmpty boolean 如果 $attributenull或空字符串, 是否跳过slug的生成. yii\behaviors\SluggableBehavior
$skipUpdateOnClean boolean 是否在未修改$owner没有时跳过此行为. yii\behaviors\AttributeBehavior
$slugAttribute string 将接收slug值的属性. yii\behaviors\SluggableBehavior
$uniqueSlugGenerator callable 生成唯一的slug值. yii\behaviors\SluggableBehavior
$uniqueValidator array slug唯一性验证器的配置. yii\behaviors\SluggableBehavior
$value callable|string|null 将用作slug的值. yii\behaviors\SluggableBehavior

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
attach() 将行为对象附加到组件. yii\base\Behavior
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\Behavior
evaluateAttributes() 计算属性值并将其分配给当前属性. yii\behaviors\AttributeBehavior
events() 声明 所有者 事件的事件处理程序. yii\behaviors\AttributeBehavior
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\behaviors\SluggableBehavior

受保护的方法

隐藏继承的方法

方法描述定义在
generateSlug() 该方法由 getValue() 调用来生成slug. yii\behaviors\SluggableBehavior
generateUniqueSlug() 使用配置的回调或迭代增量生成slug. yii\behaviors\SluggableBehavior
getValue() 返回当前属性的值. yii\behaviors\SluggableBehavior
isEmpty() 检查 $slugPart 是否为空字符串或null. yii\behaviors\SluggableBehavior
isNewSlugNeeded() 检查是否需要生成新的slug. yii\behaviors\SluggableBehavior
makeUnique() $ensureUniquetrue时, getValue() 调用此方法以生成唯一的slug. yii\behaviors\SluggableBehavior
validateSlug() 检查给定的slug值是否是唯一的. yii\behaviors\SluggableBehavior

属性详情

$attribute public 属性

属性或属性列表, 其值将被转换成slugnull, 这意味着$value属性将用于生成slug值.

public string|array|null $attribute null
$ensureUnique public 属性

是否确保生成的slug值在所有者类记录中是唯一的.

如果启用, 行为将自动验证slug的唯一性. 如果验证失败, 它将尝试生成唯一的slug值, 直到成功.

public boolean $ensureUnique false
$immutable public 属性 (可用自版本: 2.0.2)

如果slug已经生成过, 是否保持不变.

如果为false, 将会生成一个新的slug; 如果为true, 即使 $attribute 更改, 也不会生成新的slug.

public boolean $immutable false
$skipOnEmpty public 属性 (可用自版本: 2.0.13)

如果 $attributenull或空字符串, 是否跳过slug的生成.

如果为true, 则如果 $attributenull或空字符串, 行为将不会生成新的slug.

public boolean $skipOnEmpty false
$slugAttribute public 属性

将接收slug值的属性.

public string $slugAttribute 'slug'
$uniqueSlugGenerator public 属性

生成唯一的slug值. 在启用 $ensureUnique 并且生成的slug不唯一的情况下使用它. 这应该是一个 PHP 回调, 具有以下签名:

function ($baseSlug, $iteration, $model)
{
    // 返回唯一的`slug`值
}

如果未设置, 唯一的slug将生成添加增量后缀到基本slug.

$uniqueValidator public 属性

slug唯一性验证器的配置. 参数class可以省略 - 默认使用 yii\validators\UniqueValidator.

参见 yii\validators\UniqueValidator.

public array $uniqueValidator = []
$value public 属性

将用作slug的值.

这可以是匿名函数或任意值或null. 如果是前者, 则函数的返回值将被用作slug. 如果为null, 那么$attribute属性将用于生成一个slug.

函数的签名应如下:

function ($event)
{
    // return slug
}
public callable|string|null $value null

方法详情

generateSlug() protected 方法

该方法由 getValue() 调用来生成slug.

你可以覆盖它, 以生成自定义的slug.

默认实现在由破折号(-)连接的输入字符串上调用 yii\helpers\Inflector::slug().

protected string generateSlug ( $slugParts )
$slugParts array

应该连接并转换为生成slug值的字符串数组.

return string

转换结果.

generateUniqueSlug() protected 方法

使用配置的回调或迭代增量生成slug.

protected string generateUniqueSlug ( $baseSlug, $iteration )
$baseSlug string

基本slug值.

$iteration integer

迭代次数.

return string

新的slug值.

throws yii\base\InvalidConfigException
getValue() protected 方法

返回当前属性的值.

该方法由 evaluateAttributes() 调用. 其返回值将被分配给与触发事件相对应的属性.

protected mixed getValue ( $event )
$event yii\base\Event

触发当前属性更新的事件.

return mixed

属性的值.

init() public 方法

初始化对象.

在使用给定的配置初始化对象之后, 在构造函数的末尾调用此方法.

public void init ( )
isEmpty() protected 方法 (可用自版本: 2.0.13)

检查 $slugPart 是否为空字符串或null.

protected boolean isEmpty ( $slugPart )
$slugPart string

用于生成slug值的属性之一.

return boolean

$slugPart 是否为空字符串或null.

isNewSlugNeeded() protected 方法 (可用自版本: 2.0.7)

检查是否需要生成新的slug.

getValue() 调用此方法来检查是否需要生成新的slug.

你可以覆盖它来自定义检查.

protected boolean isNewSlugNeeded ( )
makeUnique() protected 方法 (可用自版本: 2.0.7)

$ensureUniquetrue时, getValue() 调用此方法以生成唯一的slug.

调用 generateUniqueSlug() 直到生成的slug是唯一的, 并返回它的值.

参见:

protected string makeUnique ( $slug )
$slug string

基本slug值.

return string

唯一的slug值.

validateSlug() protected 方法

检查给定的slug值是否是唯一的.

protected boolean validateSlug ( $slug )
$slug string

slug值.

return boolean

slug值是否是唯一的.