Yii2 - медлительное поведение

Я настроил Sluggable поведение на моей модели следующим образом:

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

Мне нужно сделать:

  • Если пользователь заполняет поле формы с именем "URL", его следует использовать вместо автоматически созданного слага.
  • Если пользователь изменяет заголовок, он помечает флажок, если он хочет, чтобы слаг обновлялся.

Я обнаружил, что Sluggable Behavior имеет атрибут "неизменяемый", но я не вижу способа манипулировать им.

Также я не вижу способа остановить автоматическую генерацию, если задано значение.

Есть идеи?

1 ответ

Для таких необычных требований вы должны, вероятно, расширить SluggableBehavior и перезаписать getValue() а также isNewSlugNeeded() методы подвигать ваши потребности.

Вы также можете играть с $value свойства и / или изменить некоторые настройки поведения в beforeValidate() модели:

public function beforeValidate() {
    $this->getBahavior('my-behavior-name')->immutable = !$this->changeSlugCheckbox;

    return parent::beforeValidate();
}

Но нестандартное поведение - гораздо более чистое решение.

Другие вопросы по тегам