Yii2 - 可缓解的行为

时间:2018-04-19 03:19:20

标签: php yii2 slug yii-behaviour

我在模型上配置了Sluggable行为,如下所示:

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

我需要这样做:

  • 如果用户填写名为" URL"的表单字段,则应使用此字段代替自动生成的slug。
  • 如果用户更改了标题,他们会在需要更新slug时标记一个复选框。

我发现Sluggable Behavior有一个属性" immutable"但我没有看到操纵它的方法。

如果给出了值,我也没有办法停止自动生成。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

对于这些不寻常的要求,您应该扩展SluggableBehavior并覆盖getValue()isNewSlugNeeded()方法,以满足您的需求。

您还可以使用$value属性和/或更改模型beforeValidate()中的某些行为设置:

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

    return parent::beforeValidate();
}

但是自定义行为是更加干净的解决方案。