没有命名空间的类 yii yii\base yii\behaviors yii\caching yii\captcha yii\console yii\console\controllers yii\console\widgets yii\data yii\db yii\db\conditions yii\db\cubrid yii\db\cubrid\conditions yii\db\mssql yii\db\mssql\conditions yii\db\mysql yii\db\oci yii\db\oci\conditions yii\db\pgsql yii\db\sqlite yii\db\sqlite\conditions yii\di yii\filters yii\filters\auth yii\grid yii\helpers yii\i18n yii\log yii\mail yii\mutex yii\rbac yii\rest yii\test yii\validators yii\web yii\widgets

Class yii\behaviors\SluggableBehavior

继承yii\behaviors\SluggableBehavior » yii\behaviors\AttributeBehavior » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable
可用版本自2.0
源码 https://github.com/yiichina/yii2/blob/api/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 对象执行验证过程中填充 slug 属性的值, 该值可以在 URL 中用作 slug。

由于属性值是被这个行为自动设置,所以它不必用户输入也因此没有必要验证。 因此,slug 属性不应该出现在 rules() 这个模型方法中。

如果你的属性名不是 slug,那么你可以像下面那样配置 $slugAttribute 属性来调整:

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

公共属性

隐藏继承的属性

属性类型描述被定义在
$attribute string|array|null 单个属性或者属性列表,它们的值将会转译为 slug, 如果是 null 那么将会用 $value 属性来生成 slug。 yii\behaviors\SluggableBehavior
$attributes array 属性列表,属性的值将由 $value 自动填充。 数组的键是 ActiveRecord 的事件,属性就是更新于这些事件之上, 数组的值就是要更新的属性。 你可以用字符串来表示一个单独的属性也可以用一个数组来表示一系列属性。比如, `php [ ActiveRecord::EVENT_BEFORE_INSERT => ['attribute1', 'attribute2'], ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2', ] ` yii\behaviors\AttributeBehavior
$ensureUnique boolean 是否确保生成的 slug 值在属主 AR 类的所有记录里是唯一的。 如果设置为 true,行为将会自动验证 slug 的唯一性。验证失败的话, 它还会在重复的 slug 基础上不断尝试生成一个唯一的 slug,直到它不再是重复的 slug 为止。 yii\behaviors\SluggableBehavior
$immutable boolean 如果之前已经生成过的话,是否需要生成一个全新的 slug。 如果是 true,该行为不会生成新的 slug,即使 $attribute 有变化了。 yii\behaviors\SluggableBehavior
$owner yii\base\Component|null The owner of this behavior yii\base\Behavior
$preserveNonEmptyValues boolean 是否保留非空的属性值 yii\behaviors\AttributeBehavior
$skipOnEmpty boolean 如果 $attribute 是 null 或者是一个空字符串时,是否跳过 slug 的生成过程。 如果是 true,那么在 $attribute 是 null 或者是一个空字符串时就不会生成一个新的 slug。 yii\behaviors\SluggableBehavior
$skipUpdateOnClean boolean $owner 没有更新的时候是否跳过这个行为 yii\behaviors\AttributeBehavior
$slugAttribute string 接收 slug 值的属性。 yii\behaviors\SluggableBehavior
$uniqueSlugGenerator callable Slug 唯一值生成器。当启用了 $ensureUnique 并且生成了不唯一的 slug 时使用。 唯一值生成器的函数签名应该是下面这样的: `php function ($baseSlug, $iteration, $model) { // return uniqueSlug } ` 如果没有配置唯一值生成器,行为将给原来重复的 slug 填充后缀使之达到唯一性。 yii\behaviors\SluggableBehavior
$uniqueValidator array Slug 的唯一性验证器配置数组。参数 'class' 可以忽略为空, 默认情况下,将会使用 yii\validators\UniqueValidator 作为唯一性验证器。 yii\behaviors\SluggableBehavior
$value callable|string|null 用来生成 slug 的值。它可以是一个匿名函数, 或者是任意的值或者 null。如果是前者,匿名函数的返回值将会当作 slug。 如果是 null,那么使用 $attribute 属性生成 slug。 匿名函数的签名应该是这样的, `php function ($event) { // return slug } ` yii\behaviors\SluggableBehavior

公共方法

隐藏继承的方法

方法描述被定义在
__call() Calls the named method which is not a class method. yii\base\BaseObject
__construct() Constructor. yii\base\BaseObject
__get() Returns the value of an object property. yii\base\BaseObject
__isset() Checks if a property is set, i.e. defined and not null. yii\base\BaseObject
__set() Sets value of an object property. yii\base\BaseObject
__unset() Sets an object property to null. yii\base\BaseObject
attach() Attaches the behavior object to the component. yii\base\Behavior
canGetProperty() Returns a value indicating whether a property can be read. yii\base\BaseObject
canSetProperty() Returns a value indicating whether a property can be set. yii\base\BaseObject
className() Returns the fully qualified name of this class. yii\base\BaseObject
detach() Detaches the behavior object from the component. yii\base\Behavior
evaluateAttributes() 计算属性的值并分配给当前属性。 yii\behaviors\AttributeBehavior
events() Declares event handlers for the $owner's events. yii\behaviors\AttributeBehavior
hasMethod() Returns a value indicating whether a method is defined. yii\base\BaseObject
hasProperty() Returns a value indicating whether a property is defined. yii\base\BaseObject
init() Initializes the object. yii\behaviors\SluggableBehavior

受保护的方法

隐藏继承的方法

方法描述被定义在
generateSlug() 该方法在 getValue() 中调用,用来生成 slug。 你可以通过覆盖它来自定义 slug 的生成过程。 默认的实现就是调用 yii\helpers\Inflector::slug(), 参数就是用连字符(-)拼接过的字符串。 yii\behaviors\SluggableBehavior
generateUniqueSlug() 用配置好的回调或者迭代填充的方法生成 slug。 yii\behaviors\SluggableBehavior
getValue() 返回给当前属性准备的值。 该方法在 evaluateAttributes() 里调用。 它的返回值将会设置到对应触发事件的属性上。 yii\behaviors\SluggableBehavior
isEmpty() 检测 $slugPart 是否是空字符串或者 null。 yii\behaviors\SluggableBehavior
isNewSlugNeeded() 检测是否有必要生成一个新的 slug。 该方法是在 getValue() 中调用,用来检测是否有必要生成一个新的slug。 你可以覆盖它实现自定义的检测过程。 yii\behaviors\SluggableBehavior
makeUnique() 这个方法在 getValue() 中调用,当 $ensureUnique 为 true 时可以生成唯一的 slug。 循环调用 generateUniqueSlug() 直到生成了唯一的 slug,然后返回它。 yii\behaviors\SluggableBehavior
validateSlug() 检测给定的 slug 是否是唯一的。 yii\behaviors\SluggableBehavior

属性详情

$attribute 公共 属性

单个属性或者属性列表,它们的值将会转译为 slug, 如果是 null 那么将会用 $value 属性来生成 slug。

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

是否确保生成的 slug 值在属主 AR 类的所有记录里是唯一的。 如果设置为 true,行为将会自动验证 slug 的唯一性。验证失败的话, 它还会在重复的 slug 基础上不断尝试生成一个唯一的 slug,直到它不再是重复的 slug 为止。

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

如果之前已经生成过的话,是否需要生成一个全新的 slug。 如果是 true,该行为不会生成新的 slug,即使 $attribute 有变化了。

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

如果 $attribute 是 null 或者是一个空字符串时,是否跳过 slug 的生成过程。 如果是 true,那么在 $attribute 是 null 或者是一个空字符串时就不会生成一个新的 slug。

public boolean $skipOnEmpty false
$slugAttribute 公共 属性

接收 slug 值的属性。

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

Slug 唯一值生成器。当启用了 $ensureUnique 并且生成了不唯一的 slug 时使用。 唯一值生成器的函数签名应该是下面这样的:

function ($baseSlug, $iteration, $model)
{
    // return uniqueSlug
}

如果没有配置唯一值生成器,行为将给原来重复的 slug 填充后缀使之达到唯一性。

$uniqueValidator 公共 属性

Slug 的唯一性验证器配置数组。参数 'class' 可以忽略为空, 默认情况下,将会使用 yii\validators\UniqueValidator 作为唯一性验证器。

参见 yii\validators\UniqueValidator.

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

用来生成 slug 的值。它可以是一个匿名函数, 或者是任意的值或者 null。如果是前者,匿名函数的返回值将会当作 slug。 如果是 null,那么使用 $attribute 属性生成 slug。 匿名函数的签名应该是这样的,

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

方法详情

generateSlug() 受保护 方法

该方法在 getValue() 中调用,用来生成 slug。 你可以通过覆盖它来自定义 slug 的生成过程。 默认的实现就是调用 yii\helpers\Inflector::slug(), 参数就是用连字符(-)拼接过的字符串。

protected string generateSlug($slugParts)
$slugParts array

一个字符串数组,通过拼接和转译来生成 slug 值。

return string

转译过的结果。

generateUniqueSlug() 受保护 方法

用配置好的回调或者迭代填充的方法生成 slug。

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

原始 slug 值。

$iteration integer

迭代数字

return string

新的 slug 值。

throws yii\base\InvalidConfigException
getValue() 受保护 方法

返回给当前属性准备的值。 该方法在 evaluateAttributes() 里调用。 它的返回值将会设置到对应触发事件的属性上。

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

触发当前属性更新的事件

return mixed

属性值

init() 公共 方法

Initializes the object.

This method is invoked at the end of the constructor after the object is initialized with the given configuration.

public void init()
isEmpty() 受保护 方法 (自版本 2.0.13 可用)

检测 $slugPart 是否是空字符串或者 null。

protected boolean isEmpty($slugPart)
$slugPart string

用来生成 slug 的属性列表里的一个属性。

return boolean

是否 $slugPart 为空。

isNewSlugNeeded() 受保护 方法 (自版本 2.0.7 可用)

检测是否有必要生成一个新的 slug。 该方法是在 getValue() 中调用,用来检测是否有必要生成一个新的slug。 你可以覆盖它实现自定义的检测过程。

protected boolean isNewSlugNeeded()
makeUnique() 受保护 方法 (自版本 2.0.7 可用)

这个方法在 getValue() 中调用,当 $ensureUnique 为 true 时可以生成唯一的 slug。 循环调用 generateUniqueSlug() 直到生成了唯一的 slug,然后返回它。

参见:

protected string makeUnique($slug)
$slug string

原始 slug 值。

return string

唯一的 slug。

validateSlug() 受保护 方法

检测给定的 slug 是否是唯一的。

protected boolean validateSlug($slug)
$slug string

Slug 值。

return boolean

是否 slug 值是唯一的。