设置方案后验证无效

时间:2017-04-26 05:48:09

标签: yii2 yii2-model yii2-validation

创建方案后,我的客户端验证无效。它在创建场景之前工作正常。我有两个方案更新和创建,我在创建方案上需要两个字段,我在更新方案上需要一个字段 我的模特

        class BaseBroadcast extends BaseActiveRecord
    {
      const SCENARIO_UPDATE = 'update';
      const SCENARIO_CREATE = 'create';


/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [
            [
                'freight_charges_unit',
                'requested_response_date',
                'close_reason'
            ],
            'required'
        ],
       ......
    ];
}

/**
 * @return array
 */
public function scenarios(): array
{
    parent::scenarios();
    return [
        self::SCENARIO_UPDATE => ['close_reason'],
        self::SCENARIO_CREATE => ['freight_charges_unit','requested_response_date']

    ];
}

}

我使用了像

这样的创建场景
$model = new Broadcast();
$model->scenario = Broadcast::SCENARIO_CREATE;

此 和更新场景如

$model = Broadcast::findOne(['id' => $id]);
$model->scenario = Broadcast::SCENARIO_UPDATE;

此。

我在表单上启用了客户端验证

 <?php $form = ActiveForm::begin(['action' => ......,
    'enableClientValidation' => true,]) ?>

1 个答案:

答案 0 :(得分:0)

在模特

上试试这个顺序
const SCENARIO_UPDATE = 'update';
const SCENARIO_CREATE = 'create';


public function scenarios()
{
    return [
        self::SCENARIO_UPDATE => ['close_reason'],
        self::SCENARIO_CREATE => ['freight_charges_unit','requested_response_date']
    ];
}

public function rules()
{
  return [
            [['freight_charges_unit','requested_response_date'], 'required','on' => 'create'],
            [['close_reason'], 'required','on' => 'update'],
    ];
}

这在控制器中

  

$ model = new Broadcast(['scenario'=&gt;'create']);

     

// for update

     

$ model = $ this-&gt; findModel($ id);

     

$ model-&gt; scenario ='update';