【问题标题】:Yii2 - Sluggable BehaviorYii2 - Sluggable 行为
【发布时间】:2018-09-29 10:22:01
【问题描述】:

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

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

我需要做的:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: php yii2 slug yii-behaviour


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 2020-08-09
      • 2012-08-16
      • 2017-11-13
      相关资源
      最近更新 更多