Yii场景 - 验证不会触发

时间:2015-08-28 08:56:03

标签: php yii yii2

/**
   * @inheritdoc
   */
  public function rules() {
    return [
      [['quantity', 'first_name', 'last_name', 'email', 'country', 'postal_code', 'locality', 'address'], 'required'],
      [['quantity'], 'integer'],
      [['first_name', 'last_name', 'email', 'country', 'phone'], 'string', 'max' => 127],
      [['postal_code'], 'string', 'max' => 20],
      [['locality', 'address'], 'string', 'max' => 255]
    ];
  }

    public function scenarios() {
        return [
            'firstStep' => ['quantity', 'first_name', 'last_name', 'email'],
            'secondStep' => ['country', 'postal_code', 'locality', 'address', 'phone'],
        ];
    }

当我提交表格时,我得到:

  

无效参数 - yii \ base \ InvalidParamException

     

未知情况:默认

有谁知道为什么?也许这不是覆盖 场景方法的正确方法。

4 个答案:

答案 0 :(得分:1)

 public function rules() {
return [
  [['quantity', 'first_name', 'last_name', 'email', 'country', 'postal_code', 'locality', 'address'], 'required'],
  [['quantity'], 'integer'],
  [['first_name', 'last_name', 'email', 'country', 'phone'], 'string', 'max' => 127],
  [['postal_code'], 'string', 'max' => 20],
  [['locality', 'address'], 'string', 'max' => 255],

  [['quantity', 'first_name', 'last_name', 'email'], 'required', 'on' => 'firstStep'],
  [['country', 'postal_code', 'locality', 'address', 'phone'], 'required', 'on' => 'secondStep'],
];
}

 you change last two line....

 And now use scenario in your controller...

 $model->scenario = 'firstStep';

 or, 

 $model->scenario = 'secondStep';

答案 1 :(得分:0)

您是否在模型中扩展了ActiveRecord

信息:http://www.yiiframework.com/doc-2.0/guide-structure-models.html

答案 2 :(得分:0)

确定。严格地说,我之所以遇到这个错误,是因为我没有正确覆盖场景方法,因为,就像我一样,我不会保留覆盖的方法特性。 鉴于此var color = (document.getElementById("pt").style.background.length > 0) ? document.getElementById("pt").style.background.length : getComputedStyle(document.getElementById("pt")).getPropertyValue("background"); ,我会在RETURN上完全替换。

为了避免这种情况,我必须正确地执行此操作,因为它在文档中声明:

即:

default error

当我们这样做时,错误就消失了。

然而,@ Vishu Patel确实解决了我遇到的隐含问题。所以我会接受它的答案。

答案 3 :(得分:0)

因为您要覆盖方案,所以您丢失了默认方案。 您必须按照以下步骤进行操作

public function scenarios() {
    $scenarios = parent::scenarios(); // This will cover you
    $scenarios['firstStep'] = ['quantity', 'first_name', 'last_name', 'email'];
    $scenarios['secondStep'] = ['country', 'postal_code', 'locality', 'address', 'phone'];
    return $scenarios;

}