0 フォロワー

クラス 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 のスラッグとして使用できる値を自動的に設定します。

注記: このビヘイビアは、転写のための php-intl 拡張機能に依存しています。インストールされていない場合は、yii\helpers\Inflector::$transliteration で定義されている置換にフォールバックします。

SluggableBehavior を使用するには、次のコードを ActiveRecord クラスに追加します。

use yii\behaviors\SluggableBehavior;

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

デフォルトでは、SluggableBehavior は、関連付けられた AR オブジェクトが検証されているときに、URL でスラッグとして使用できる値で `slug` 属性を設定します。

属性値はこのビヘイビアによって自動的に設定されるため、通常はユーザー入力ではなく、検証する必要はありません。つまり、`slug` 属性は、モデルの rules() メソッドに表示されるべきではありません。

属性名が異なる場合は、次のように $slugAttribute プロパティを設定できます。

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

公開プロパティ

継承されたプロパティを隠す

プロパティ 説明 定義元
$attribute string|array|null スラッグに変換される属性または属性のリスト、またはスラッグの生成に `$value` プロパティが使用されることを意味する `null`。 yii\behaviors\SluggableBehavior
$attributes array $value で指定された値で自動的に設定される属性のリスト。 yii\behaviors\AttributeBehavior
$ensureUnique boolean 生成されたスラッグ値がオーナーのクラスレコード間で一意であることを確認するかどうか。 yii\behaviors\SluggableBehavior
$immutable boolean 既に生成されている場合に新しいスラッグを生成するかどうか。 yii\behaviors\SluggableBehavior
$owner yii\base\Component|null このビヘイビアのオーナー yii\base\Behavior
$preserveNonEmptyValues boolean 空でない属性値を保持するかどうか。 yii\behaviors\AttributeBehavior
$skipOnEmpty boolean $attribute が null または空文字列の場合に、スラッグの生成をスキップするかどうか。 yii\behaviors\SluggableBehavior
$skipUpdateOnClean boolean `$owner` が変更されていない場合に、このビヘイビアをスキップするかどうか。 yii\behaviors\AttributeBehavior
$slugAttribute string スラッグ値を受け取る属性 yii\behaviors\SluggableBehavior
$uniqueSlugGenerator callable|null スラッグの一意値ジェネレーター。 yii\behaviors\SluggableBehavior
$uniqueValidator array スラッグの一意性バリデーターの設定。 yii\behaviors\SluggableBehavior
$value callable|string|null スラッグとして使用される値。 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() $owner のイベントのイベントハンドラーを宣言します。 yii\behaviors\AttributeBehavior
hasMethod() メソッドが定義されているかどうかを示す値を返します。 yii\base\BaseObject
hasProperty() プロパティが定義されているかどうかを示す値を返します。 yii\base\BaseObject
init() オブジェクトを初期化します。 yii\behaviors\SluggableBehavior

保護されたメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
generateSlug() このメソッドは、スラッグを生成するためにgetValue()によって呼び出されます。 yii\behaviors\SluggableBehavior
generateUniqueSlug() 設定されたコールバックまたは繰り返し回数によるインクリメントを使用してスラッグを生成します。 yii\behaviors\SluggableBehavior
getValue() 現在の属性の値を返します。 yii\behaviors\SluggableBehavior
isEmpty() $slugPartが空文字列またはnullかどうかを確認します。 yii\behaviors\SluggableBehavior
isNewSlugNeeded() 新しいスラッグの生成が必要かどうかを確認します。このメソッドは、新しいスラッグの生成が必要かどうかを確認するためにgetValue()によって呼び出されます。 yii\behaviors\SluggableBehavior
makeUnique() $ensureUniqueがtrueの場合、一意のスラッグを生成するためにgetValue()によって呼び出されます。 yii\behaviors\SluggableBehavior
validateSlug() 指定されたスラッグ値が一意かどうかを確認します。 yii\behaviors\SluggableBehavior

プロパティの詳細

継承されたプロパティを隠す

$attribute public property

スラッグに変換される属性または属性のリスト、またはスラッグの生成に `$value` プロパティが使用されることを意味する `null`。

public string|array|null $attribute null
$ensureUnique public property

生成されたスラッグ値がオーナーのクラスレコード間で一意であることを保証するかどうか。有効にすると、ビヘイビアは自動的にスラッグの一意性を検証します。検証に失敗した場合、成功するまで基本的なスラッグにインクリメントされたサフィックスを追加して一意のスラッグ値を生成しようとします。

public boolean $ensureUnique false
$immutable public property (version 2.0.2から利用可能)

以前に生成された場合でも新しいスラッグを生成するかどうか。trueの場合、$attributeが変更されても、ビヘイビアは新しいスラッグを生成しません。

public boolean $immutable false
$skipOnEmpty public property (version 2.0.13から利用可能)

$attributeがnullまたは空文字列の場合に、スラッグの生成をスキップするかどうか。trueの場合、$attributeがnullまたは空文字列の場合、ビヘイビアは新しいスラッグを生成しません。

public boolean $skipOnEmpty false
$slugAttribute public property

スラッグ値を受け取る属性

public string $slugAttribute 'slug'
$uniqueSlugGenerator public property

スラッグの一意値ジェネレーター。$ensureUniqueが有効で、生成されたスラッグが一意でない場合に使用されます。これは、次のシグネチャを持つPHPのcallableである必要があります。

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

設定されていない場合、一意のスラッグは、基本的なスラッグにインクリメントされたサフィックスを追加して生成されます。

$uniqueValidator public property

スラッグの一意性バリデーターの設定。パラメータ'class'は省略できます - デフォルトではyii\validators\UniqueValidatorが使用されます。

yii\validators\UniqueValidatorも参照してください。

public array $uniqueValidator = []
$value public property

スラッグとして使用される値。これは、無名関数、任意の値、またはnullにすることができます。前者の場合、関数の戻り値がスラッグとして使用されます。nullの場合、$attributeプロパティを使用してスラッグが生成されます。関数のシグネチャは次のようになります。

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

メソッドの詳細

継承されたメソッドを隠す

__call() public method

定義場所: yii\base\BaseObject::__call()

クラスメソッドではない名前付きメソッドを呼び出します。

これはPHPのマジックメソッドであり、不明なメソッドが呼び出されたときに暗黙的に呼び出されるため、直接呼び出さないでください。

public mixed __call ( $name, $params )
$name string

メソッド名

$params array

メソッドパラメータ

戻り値 mixed

メソッドの戻り値

例外 yii\base\UnknownMethodException

不明なメソッドを呼び出した場合

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public method

定義場所: yii\base\BaseObject::__construct()

コンストラクタ。

デフォルトの実装は2つのことを行います。

  • 指定された設定$configを使用してオブジェクトを初期化します。
  • init()を呼び出します。

このメソッドが子クラスでオーバーライドされている場合、

  • コンストラクタの最後のパラメータは、ここにある$configのような設定配列にすることをお勧めします。
  • コンストラクタの最後に親の実装を呼び出してください。
public void __construct ( $config = [] )
$config array

オブジェクトのプロパティを初期化するために使用される名前と値のペア

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() publicメソッド

定義位置: yii\base\BaseObject::__get()

オブジェクトプロパティの値を返します。

これはPHPのマジックメソッドであり、`$value = $object->property;`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。

こちらも参照してください __set().

public mixed __get ( $name )
$name string

プロパティ名

戻り値 mixed

プロパティの値

例外 yii\base\UnknownPropertyException

プロパティが定義されていない場合

例外 yii\base\InvalidCallException

プロパティが書き込み専用の場合

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() publicメソッド

定義位置: yii\base\BaseObject::__isset()

プロパティが設定されているかどうか(定義されていて null でないかどうか)をチェックします。

これはPHPのマジックメソッドであり、`isset($object->property)`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。

プロパティが定義されていない場合は、falseが返されることに注意してください。

こちらも参照してください https://www.php.net/manual/en/function.isset.php.

public boolean __isset ( $name )
$name string

プロパティ名またはイベント名

戻り値 boolean

指定されたプロパティが設定されているかどうか(nullではないか)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() publicメソッド

定義位置: yii\base\BaseObject::__set()

オブジェクトプロパティの値を設定します。

これはPHPのマジックメソッドであり、`$object->property = $value;`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。

こちらも参照してください __get().

public void __set ( $name, $value )
$name string

プロパティ名またはイベント名

$value mixed

プロパティの値

例外 yii\base\UnknownPropertyException

プロパティが定義されていない場合

例外 yii\base\InvalidCallException

プロパティが読み取り専用の場合

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() publicメソッド

定義位置: yii\base\BaseObject::__unset()

オブジェクトプロパティを null に設定します。

これはPHPのマジックメソッドであり、`unset($object->property)`を実行した際に暗黙的に呼び出されるため、直接呼び出さないでください。

プロパティが定義されていない場合は、このメソッドは何もしません。プロパティが読み取り専用の場合は、例外をスローします。

こちらも参照してください https://www.php.net/manual/en/function.unset.php.

public void __unset ( $name )
$name string

プロパティ名

例外 yii\base\InvalidCallException

プロパティが読み取り専用の場合。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
attach() publicメソッド

定義位置: yii\base\Behavior::attach()

ビヘイビアオブジェクトをコンポーネントにアタッチします。

デフォルトの実装では、$ownerプロパティを設定し、events()で宣言されているイベントハンドラーをアタッチします。このメソッドをオーバーライドする場合は、親実装を必ず呼び出してください。

public void attach ( $owner )
$owner yii\base\Component

このビヘイビアをアタッチするコンポーネント。

                public function attach($owner)
{
    $this->owner = $owner;
    foreach ($this->events() as $event => $handler) {
        $this->_attachedEvents[$event] = $handler;
        $owner->on($event, is_string($handler) ? [$this, $handler] : $handler);
    }
}

            
canGetProperty() publicメソッド

定義位置: yii\base\BaseObject::canGetProperty()

プロパティが読み取り可能かどうかを示す値を返します。

プロパティは、以下の場合に読み取り可能です。

  • クラスに、指定された名前と関連付けられたゲッターメソッドがある場合(この場合、プロパティ名はケースインセンシティブです)。
  • クラスに、指定された名前のメンバ変数がある場合(`$checkVars`がtrueの場合)。

こちらも参照してください canSetProperty().

public boolean canGetProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

戻り値 boolean

プロパティを読み取ることができるかどうか

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() publicメソッド

定義位置: yii\base\BaseObject::canSetProperty()

プロパティが設定可能かどうかを示す値を返します。

プロパティは、以下の場合に書き込み可能です。

  • クラスに、指定された名前と関連付けられたセッターメソッドがある場合(この場合、プロパティ名はケースインセンシティブです)。
  • クラスに、指定された名前のメンバ変数がある場合(`$checkVars`がtrueの場合)。

こちらも参照してください canGetProperty().

public boolean canSetProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

戻り値 boolean

プロパティを書き込むことができるかどうか

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public staticメソッド
2.0.14以降非推奨。PHP 5.5以降では、代わりに`::class`を使用してください。

定義位置: yii\base\BaseObject::className()

このクラスの完全修飾名を返します。

public static string className ( )
戻り値 string

このクラスの完全修飾名。

                public static function className()
{
    return get_called_class();
}

            
detach() publicメソッド

定義位置: yii\base\Behavior::detach()

ビヘイビアオブジェクトをコンポーネントからデタッチします。

デフォルトの実装では、$ownerプロパティをアンセットし、events()で宣言されているイベントハンドラーをデタッチします。このメソッドをオーバーライドする場合は、親実装を必ず呼び出してください。

public void detach ( )

                public function detach()
{
    if ($this->owner) {
        foreach ($this->_attachedEvents as $event => $handler) {
            $this->owner->off($event, is_string($handler) ? [$this, $handler] : $handler);
        }
        $this->_attachedEvents = [];
        $this->owner = null;
    }
}

            
evaluateAttributes() publicメソッド

定義位置: yii\behaviors\AttributeBehavior::evaluateAttributes()

属性値を評価し、現在の属性に割り当てます。

public void evaluateAttributes ( $event )
$event yii\base\Event

                public function evaluateAttributes($event)
{
    if (
        $this->skipUpdateOnClean
        && $event->name == ActiveRecord::EVENT_BEFORE_UPDATE
        && empty($this->owner->dirtyAttributes)
    ) {
        return;
    }
    if (!empty($this->attributes[$event->name])) {
        $attributes = (array) $this->attributes[$event->name];
        $value = $this->getValue($event);
        foreach ($attributes as $attribute) {
            // ignore attribute names which are not string (e.g. when set by TimestampBehavior::updatedAtAttribute)
            if (is_string($attribute)) {
                if ($this->preserveNonEmptyValues && !empty($this->owner->$attribute)) {
                    continue;
                }
                $this->owner->$attribute = $value;
            }
        }
    }
}

            
events() publicメソッド

定義位置: yii\behaviors\AttributeBehavior::events()

$owner のイベントのイベントハンドラーを宣言します。

子クラスはこのメソッドをオーバーライドして、$ownerコンポーネントのイベントにアタッチするPHPコールバックを宣言できます。

ビヘイビアがオーナーにアタッチされると、コールバックは$ownerのイベントにアタッチされ、ビヘイビアがコンポーネントからデタッチされると、イベントからデタッチされます。

コールバックには、以下のいずれかのものが使用できます。

  • このビヘイビア内のメソッド: 'handleClick' ([$this, 'handleClick'] と同等)
  • オブジェクトメソッド: [$object, 'handleClick']
  • 静的メソッド: ['Page', 'handleClick']
  • 無名関数: function ($event) { ... }

例を以下に示します。

[
    Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
    Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
]
public array events ( )
戻り値 array

イベント(配列キー)と対応するイベントハンドラメソッド(配列値)。

                public function events()
{
    return array_fill_keys(
        array_keys($this->attributes),
        'evaluateAttributes'
    );
}

            
generateSlug() protected メソッド

このメソッドは、スラッグを生成するためにgetValue()によって呼び出されます。

スラッグ生成をカスタマイズするためにオーバーライドできます。デフォルトの実装では、ハイフン(-)で連結された入力文字列にyii\helpers\Inflector::slug()を呼び出します。

protected string generateSlug ( $slugParts )
$slugParts array

連結してスラッグ値を生成するために変換する必要がある文字列の配列。

戻り値 string

変換結果。

                protected function generateSlug($slugParts)
{
    return Inflector::slug(implode('-', $slugParts));
}

            
generateUniqueSlug() protected メソッド

設定されたコールバックまたは繰り返し回数によるインクリメントを使用してスラッグを生成します。

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

基本的なスラッグ値。

$iteration 整数

繰り返し回数。

戻り値 string

新しいスラッグ値。

例外 yii\base\InvalidConfigException

                protected function generateUniqueSlug($baseSlug, $iteration)
{
    if (is_callable($this->uniqueSlugGenerator)) {
        return call_user_func($this->uniqueSlugGenerator, $baseSlug, $iteration, $this->owner);
    }
    return $baseSlug . '-' . ($iteration + 1);
}

            
getValue() protected メソッド

現在の属性の値を返します。

このメソッドはevaluateAttributes()によって呼び出されます。その戻り値は、トリガーイベントに対応する属性に割り当てられます。

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

現在の属性の更新をトリガーするイベント。

戻り値 mixed

属性値。

                protected function getValue($event)
{
    if (!$this->isNewSlugNeeded()) {
        return $this->owner->{$this->slugAttribute};
    }
    if ($this->attribute !== null) {
        $slugParts = [];
        foreach ((array) $this->attribute as $attribute) {
            $part = ArrayHelper::getValue($this->owner, $attribute);
            if ($this->skipOnEmpty && $this->isEmpty($part)) {
                return $this->owner->{$this->slugAttribute};
            }
            $slugParts[] = $part;
        }
        $slug = $this->generateSlug($slugParts);
    } else {
        $slug = parent::getValue($event);
    }
    return $this->ensureUnique ? $this->makeUnique($slug) : $slug;
}

            
hasMethod() public メソッド

定義されている場所: yii\base\BaseObject::hasMethod()

メソッドが定義されているかどうかを示す値を返します。

デフォルトの実装は、PHP関数method_exists()の呼び出しです。PHPマジックメソッド__call()を実装した場合は、このメソッドをオーバーライドできます。

public boolean hasMethod ( $name )
$name string

メソッド名

戻り値 boolean

メソッドが定義されているかどうか。

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public メソッド

定義されている場所: yii\base\BaseObject::hasProperty()

プロパティが定義されているかどうかを示す値を返します。

プロパティは、以下の場合に定義されます。

  • クラスに、指定された名前と関連付けられたゲッターまたはセッターメソッドがある場合(この場合、プロパティ名は大文字小文字を区別しません)。
  • クラスに、指定された名前のメンバ変数がある場合(`$checkVars`がtrueの場合)。

参照

public boolean hasProperty ( $name, $checkVars true )
$name string

プロパティ名

$checkVars boolean

メンバ変数をプロパティとして扱うかどうか

戻り値 boolean

プロパティが定義されているかどうか。

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public メソッド

オブジェクトを初期化します。

このメソッドは、オブジェクトが指定された設定で初期化された後、コンストラクタの最後に呼び出されます。

public void init ( )

                public function init()
{
    parent::init();
    if (empty($this->attributes)) {
        $this->attributes = [BaseActiveRecord::EVENT_BEFORE_VALIDATE => $this->slugAttribute];
    }
    if ($this->attribute === null && $this->value === null) {
        throw new InvalidConfigException('Either "attribute" or "value" property must be specified.');
    }
}

            
isEmpty() protected メソッド (バージョン 2.0.13 から利用可能)

$slugPartが空文字列またはnullかどうかを確認します。

protected boolean isEmpty ( $slugPart )
$slugPart string

スラッグ生成に使用される属性の1つ。

戻り値 boolean

$slugPartが空かどうか。

                protected function isEmpty($slugPart)
{
    return $slugPart === null || $slugPart === '';
}

            
isNewSlugNeeded() protected メソッド (バージョン 2.0.7 から利用可能)

新しいスラッグの生成が必要かどうかを確認します。このメソッドは、新しいスラッグの生成が必要かどうかを確認するためにgetValue()によって呼び出されます。

チェックをカスタマイズするためにオーバーライドできます。

protected boolean isNewSlugNeeded ( )

                protected function isNewSlugNeeded()
{
    if (empty($this->owner->{$this->slugAttribute})) {
        return true;
    }
    if ($this->immutable) {
        return false;
    }
    if ($this->attribute === null) {
        return true;
    }
    foreach ((array) $this->attribute as $attribute) {
        if ($this->owner->isAttributeChanged($attribute)) {
            return true;
        }
    }
    return false;
}

            
makeUnique() protected メソッド (バージョン 2.0.7 から利用可能)

$ensureUniqueがtrueの場合、一意のスラッグを生成するためにgetValue()によって呼び出されます。

generateUniqueSlug()を生成されたスラッグが一意になるまで呼び出し、それを返します。

参照

protected string makeUnique ( $slug )
$slug string

基本的なスラッグ値。

戻り値 string

一意のスラッグ。

                protected function makeUnique($slug)
{
    $uniqueSlug = $slug;
    $iteration = 0;
    while (!$this->validateSlug($uniqueSlug)) {
        $iteration++;
        $uniqueSlug = $this->generateUniqueSlug($slug, $iteration);
    }
    return $uniqueSlug;
}

            
validateSlug() protected メソッド

指定されたスラッグ値が一意かどうかを確認します。

protected boolean validateSlug ( $slug )
$slug string

スラッグ値。

戻り値 boolean

スラッグが一意かどうか。

                protected function validateSlug($slug)
{
    /* @var $validator UniqueValidator */
    /* @var $model BaseActiveRecord */
    $validator = Yii::createObject(array_merge(
        [
            'class' => UniqueValidator::className(),
        ],
        $this->uniqueValidator
    ));
    $model = clone $this->owner;
    $model->clearErrors();
    $model->{$this->slugAttribute} = $slug;
    $validator->validateAttribute($model, $this->slugAttribute);
    return !$model->hasErrors();
}