HumHub Documentation (unofficial)

SluggableBehavior extends AttributeBehavior
in package

SluggableBehavior automatically fills the specified attribute with a value that can be used a slug in a URL.

Note: This behavior relies on php-intl extension for transliteration. If it is not installed it falls back to replacements defined in [[\yii\helpers\Inflector::$transliteration]].

To use SluggableBehavior, insert the following code to your ActiveRecord class:

use yii\behaviors\SluggableBehavior;

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

By default, SluggableBehavior will fill the slug attribute with a value that can be used a slug in a URL when the associated AR object is being validated.

Because attribute values will be set automatically by this behavior, they are usually not user input and should therefore not be validated, i.e. the slug attribute should not appear in the [[\yii\base\Model::rules()|rules()]] method of the model.

If your attribute name is different, you may configure the [[slugAttribute]] property like the following:

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

Alexander Kochetov creocoder@gmail.com

author

Paul Klimov klimov.paul@gmail.com

since
2.0

Table of Contents

Properties

$attribute  : string|array<string|int, mixed>|null
$attributes  : array<string|int, mixed>
$ensureUnique  : bool
$immutable  : bool
$owner  : Component|null
$preserveNonEmptyValues  : bool
$skipOnEmpty  : bool
$skipUpdateOnClean  : bool
$slugAttribute  : string
$uniqueSlugGenerator  : callable|null
$uniqueValidator  : array<string|int, mixed>
$value  : callable|string|null
$_attachedEvents  : array<string|int, mixed>

Methods

__call()  : mixed
Calls the named method which is not a class method.
__construct()  : mixed
Constructor.
__get()  : mixed
Returns the value of an object property.
__isset()  : bool
Checks if a property is set, i.e. defined and not null.
__set()  : mixed
Sets value of an object property.
__unset()  : mixed
Sets an object property to null.
attach()  : mixed
Attaches the behavior object to the component.
canGetProperty()  : bool
Returns a value indicating whether a property can be read.
canSetProperty()  : bool
Returns a value indicating whether a property can be set.
className()  : string
Returns the fully qualified name of this class.
detach()  : mixed
Detaches the behavior object from the component.
evaluateAttributes()  : mixed
Evaluates the attribute value and assigns it to the current attributes.
events()  : array<string|int, mixed>
Declares event handlers for the [[owner]]'s events.
hasMethod()  : bool
Returns a value indicating whether a method is defined.
hasProperty()  : bool
Returns a value indicating whether a property is defined.
init()  : mixed
Initializes the object.
generateSlug()  : string
This method is called by [[getValue]] to generate the slug.
generateUniqueSlug()  : string
Generates slug using configured callback or increment of iteration.
getValue()  : mixed
Returns the value for the current attributes.
isEmpty()  : bool
Checks if $slugPart is empty string or null.
isNewSlugNeeded()  : bool
Checks whether the new slug generation is needed This method is called by [[getValue]] to check whether the new slug generation is needed.
makeUnique()  : string
This method is called by [[getValue]] when [[ensureUnique]] is true to generate the unique slug.
validateSlug()  : bool
Checks if given slug value is unique.

Properties

$attribute

public string|array<string|int, mixed>|null $attribute

the attribute or list of attributes whose value will be converted into a slug or null meaning that the $value property will be used to generate a slug.

$attributes

public array<string|int, mixed> $attributes = []

list of attributes that are to be automatically filled with the value specified via [[value]]. The array keys are the ActiveRecord events upon which the attributes are to be updated, and the array values are the corresponding attribute(s) to be updated. You can use a string to represent a single attribute, or an array to represent a list of attributes. For example,

[
    ActiveRecord::EVENT_BEFORE_INSERT => ['attribute1', 'attribute2'],
    ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2',
]

$ensureUnique

public bool $ensureUnique = false

whether to ensure generated slug value to be unique among owner class records. If enabled behavior will validate slug uniqueness automatically. If validation fails it will attempt generating unique slug value from based one until success.

$immutable

public bool $immutable = false

whether to generate a new slug if it has already been generated before. If true, the behavior will not generate a new slug even if [[attribute]] is changed.

Tags
since
2.0.2

$preserveNonEmptyValues

public bool $preserveNonEmptyValues = false

whether to preserve non-empty attribute values.

Tags
since
2.0.13

$skipOnEmpty

public bool $skipOnEmpty = false

whether to skip slug generation if [[attribute]] is null or an empty string. If true, the behaviour will not generate a new slug if [[attribute]] is null or an empty string.

Tags
since
2.0.13

$skipUpdateOnClean

public bool $skipUpdateOnClean = true

whether to skip this behavior when the $owner has not been modified

Tags
since
2.0.8

$slugAttribute

public string $slugAttribute = 'slug'

the attribute that will receive the slug value

$uniqueSlugGenerator

public callable|null $uniqueSlugGenerator

slug unique value generator. It is used in case [[ensureUnique]] enabled and generated slug is not unique. This should be a PHP callable with following signature:

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

If not set unique slug will be generated adding incrementing suffix to the base slug.

$uniqueValidator

public array<string|int, mixed> $uniqueValidator = []

configuration for slug uniqueness validator. Parameter 'class' may be omitted - by default [[UniqueValidator]] will be used.

Tags
see
UniqueValidator

$value

public callable|string|null $value

the value that will be used as a slug. This can be an anonymous function or an arbitrary value or null. If the former, the return value of the function will be used as a slug. If null then the $attribute property will be used to generate a slug. The signature of the function should be as follows,

function ($event)
{
    // return slug
}

$_attachedEvents

private array<string|int, mixed> $_attachedEvents = []

Attached events handlers

Methods

__call()

Calls the named method which is not a class method.

public __call(string $name, array<string|int, mixed> $params) : mixed

Do not call this method directly as it is a PHP magic method that will be implicitly called when an unknown method is being invoked.

Parameters
$name : string

the method name

$params : array<string|int, mixed>

method parameters

Tags
throws
UnknownMethodException

when calling unknown method

Return values
mixed

the method return value

__construct()

Constructor.

public __construct([array<string|int, mixed> $config = [] ]) : mixed

The default implementation does two things:

  • Initializes the object with the given configuration $config.
  • Call [[init()]].

If this method is overridden in a child class, it is recommended that

  • the last parameter of the constructor is a configuration array, like $config here.
  • call the parent implementation at the end of the constructor.
Parameters
$config : array<string|int, mixed> = []

name-value pairs that will be used to initialize the object properties

__get()

Returns the value of an object property.

public __get(string $name) : mixed

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $value = $object->property;.

Parameters
$name : string

the property name

Tags
throws
UnknownPropertyException

if the property is not defined

throws
InvalidCallException

if the property is write-only

see
__set()
Return values
mixed

the property value

__isset()

Checks if a property is set, i.e. defined and not null.

public __isset(string $name) : bool

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing isset($object->property).

Note that if the property is not defined, false will be returned.

Parameters
$name : string

the property name or the event name

Tags
see
https://www.php.net/manual/en/function.isset.php
Return values
bool

whether the named property is set (not null).

__set()

Sets value of an object property.

public __set(string $name, mixed $value) : mixed

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing $object->property = $value;.

Parameters
$name : string

the property name or the event name

$value : mixed

the property value

Tags
throws
UnknownPropertyException

if the property is not defined

throws
InvalidCallException

if the property is read-only

see
__get()

__unset()

Sets an object property to null.

public __unset(string $name) : mixed

Do not call this method directly as it is a PHP magic method that will be implicitly called when executing unset($object->property).

Note that if the property is not defined, this method will do nothing. If the property is read-only, it will throw an exception.

Parameters
$name : string

the property name

Tags
throws
InvalidCallException

if the property is read only.

see
https://www.php.net/manual/en/function.unset.php

attach()

Attaches the behavior object to the component.

public attach(Component $owner) : mixed

The default implementation will set the [[owner]] property and attach event handlers as declared in [[events]]. Make sure you call the parent implementation if you override this method.

Parameters
$owner : Component

the component that this behavior is to be attached to.

canGetProperty()

Returns a value indicating whether a property can be read.

public canGetProperty(string $name[, bool $checkVars = true ]) : bool

A property is readable if:

  • the class has a getter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
Parameters
$name : string

the property name

$checkVars : bool = true

whether to treat member variables as properties

Tags
see
canSetProperty()
Return values
bool

whether the property can be read

canSetProperty()

Returns a value indicating whether a property can be set.

public canSetProperty(string $name[, bool $checkVars = true ]) : bool

A property is writable if:

  • the class has a setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
Parameters
$name : string

the property name

$checkVars : bool = true

whether to treat member variables as properties

Tags
see
canGetProperty()
Return values
bool

whether the property can be written

className()

Returns the fully qualified name of this class.

public static className() : string
Tags
deprecated

since 2.0.14. On PHP >=5.5, use ::class instead.

Return values
string

the fully qualified name of this class.

detach()

Detaches the behavior object from the component.

public detach() : mixed

The default implementation will unset the [[owner]] property and detach event handlers declared in [[events]]. Make sure you call the parent implementation if you override this method.

evaluateAttributes()

Evaluates the attribute value and assigns it to the current attributes.

public evaluateAttributes(Event $event) : mixed
Parameters
$event : Event

events()

Declares event handlers for the [[owner]]'s events.

public events() : array<string|int, mixed>
Return values
array<string|int, mixed>

events (array keys) and the corresponding event handler methods (array values).

hasMethod()

Returns a value indicating whether a method is defined.

public hasMethod(string $name) : bool

The default implementation is a call to php function method_exists(). You may override this method when you implemented the php magic method __call().

Parameters
$name : string

the method name

Return values
bool

whether the method is defined

hasProperty()

Returns a value indicating whether a property is defined.

public hasProperty(string $name[, bool $checkVars = true ]) : bool

A property is defined if:

  • the class has a getter or setter method associated with the specified name (in this case, property name is case-insensitive);
  • the class has a member variable with the specified name (when $checkVars is true);
Parameters
$name : string

the property name

$checkVars : bool = true

whether to treat member variables as properties

Tags
see
canGetProperty()
see
canSetProperty()
Return values
bool

whether the property is defined

generateSlug()

This method is called by [[getValue]] to generate the slug.

protected generateSlug(array<string|int, mixed> $slugParts) : string

You may override it to customize slug generation. The default implementation calls [[\yii\helpers\Inflector::slug()]] on the input strings concatenated by dashes (-).

Parameters
$slugParts : array<string|int, mixed>

an array of strings that should be concatenated and converted to generate the slug value.

Return values
string

the conversion result.

generateUniqueSlug()

Generates slug using configured callback or increment of iteration.

protected generateUniqueSlug(string $baseSlug, int $iteration) : string
Parameters
$baseSlug : string

base slug value

$iteration : int

iteration number

Tags
throws
InvalidConfigException
Return values
string

new slug value

getValue()

Returns the value for the current attributes.

protected getValue(mixed $event) : mixed
Parameters
$event : mixed

the event that triggers the current attribute updating.

Return values
mixed

the attribute value

isEmpty()

Checks if $slugPart is empty string or null.

protected isEmpty(string $slugPart) : bool
Parameters
$slugPart : string

One of attributes that is used for slug generation.

Tags
since
2.0.13
Return values
bool

whether $slugPart empty or not.

isNewSlugNeeded()

Checks whether the new slug generation is needed This method is called by [[getValue]] to check whether the new slug generation is needed.

protected isNewSlugNeeded() : bool

You may override it to customize checking.

Tags
since
2.0.7
Return values
bool

makeUnique()

This method is called by [[getValue]] when [[ensureUnique]] is true to generate the unique slug.

protected makeUnique(string $slug) : string

Calls [[generateUniqueSlug]] until generated slug is unique and returns it.

Parameters
$slug : string

basic slug value

Tags
see
getValue
see
generateUniqueSlug
since
2.0.7
Return values
string

unique slug

validateSlug()

Checks if given slug value is unique.

protected validateSlug(string $slug) : bool
Parameters
$slug : string

slug value

Return values
bool

whether slug is unique.


        
On this page

Search results