Yii场景-验证未触发

gorkyyrv  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(134)
/**
   * @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\参数无效异常
未知方案:默认值
有人知道为什么吗?也许这不是**覆盖***scenario 方法的正确方法。

azpvetkf

azpvetkf1#

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';
iyfjxgzm

iyfjxgzm3#

好的。严格地说,我出现这个错误的原因是因为我没有正确地覆盖场景方法,因为,像我这样做,我不会保留被覆盖的方法的特性。我会在RETURN时做一个完全替换,给定这个default error
为了避免这种情况,我必须正确地这样做,因为它在docs上声明:
例如:

public function scenarios() {

            $scenarios = parent::scenarios();

            $scenarios[self::SCENARIO_FIRST_STEP] = ['quantity', 'first_name', 'last_name', 'email'];
            $scenarios[self::SCENARIO_SECOND_STEP] = ['country', 'postal_code', 'locality', 'address', 'phone'];

            return $scenarios;

    }

当我们这样做时,错误就消失了。
然而,维舒·帕特尔确实解决了我所面临的隐含问题。所以我会接受它的答案。

h79rfbju

h79rfbju4#

因为您正在覆盖方案,所以丢失了默认方案。

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;

}

相关问题