Yii2 设置场景后验证不起作用

Yii2 设置场景后验证不起作用,yii2,yii2-model,yii2-validation,Yii2,Yii2 Model,Yii2 Validation,我的客户端验证在创建场景后不起作用。在创建场景之前,它可以正常工作。我有两个场景更新和创建,创建场景需要两个字段,更新场景需要一个字段 我的型号 class BaseBroadcast extends BaseActiveRecord { const SCENARIO_UPDATE = 'update'; const SCENARIO_CREATE = 'create'; /** * @inheritdoc */ public functi

我的客户端验证在创建场景后不起作用。在创建场景之前,它可以正常工作。我有两个场景更新和创建,创建场景需要两个字段,更新场景需要一个字段 我的型号

        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;
这个 并更新场景,如

$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,]) ?>

在型号上尝试此订单

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=新广播(['scenario'=>'create'])

//更新

$model=$this->findModel($id)

$model->scenario='update'


那么发生了什么?这些字段不再按照场景的要求进行验证?是。当我单击submit with required field as empty时,表单正在提交,您不必设置
'enableClientValidation'=>true
-这是默认值,此行
parent::scenarios()什么也不做。无论如何,您可以显示在该模型上运行的控制器操作的代码吗?更新场景操作
public function actionClose($id){$model=Broadcast::findOne(['id'=>$id]);$model->status=Broadcast::status\u CLOSED;$model->scenario=Broadcast::scenario\u update;if($model->load(post())&&&$model->update(true,['closeu reason','status']){\setFlash('success',Yii::t('company','Broadcast Closed Successfully!!!');return$this->redirect(Yii::$app->request->referer);}return$this->render('u closeReasonForm,['model'=>$model');
不确定
post()
是,但看起来还可以。您能同时显示
\u closeReasonForm
吗?用它更新问题,如果没有格式,很难阅读代码。