2

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

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

我需要去做:

  • 如果用户填写一个名为“URL”的表单字段,则应该使用它来代替自动生成的 slug。
  • 如果用户更改标题,如果他们想要更新 slug,他们将标记一个复选框。

我发现 Sluggable Behavior 有一个属性“不可变”,但我没有看到操纵它的方法。

如果给出值,我也看不到停止自动生成的方法。

有任何想法吗?

4

1 回答 1

2

对于此类不寻常的要求,您可能应该扩展SluggableBehavior和覆盖满足您需求getValue()isNewSlugNeeded()方法。

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

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

    return parent::beforeValidate();
}

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

于 2018-04-19T10:02:04.157 回答