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();
}
Но нестандартное поведение - гораздо более чистое решение.