2017-04-26 73 views
0

在創建場景後,我的客戶端驗證不起作用。它在創建場景之前工作正常。我有兩個場景更新和創造,我要需要兩個領域上創建方案和我在更新方案 我的模型設置場景後驗證不起作用

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

那麼發生了什麼?這些字段沒有按照需求進行驗證? – Bizley

+0

是的。當我點擊提交需要的字段爲空時表單提交 –

+0

你不必設置''enableClientValidation'=> true' - 這是默認的,這一行'parent :: scenarios();'什麼也不做。無論如何,你能展示在這個模型上操作的控制器的行爲代碼嗎? – Bizley

回答

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'], 
    ]; 
} 

這個順序而這在控制器

$模式=新的廣播([ 'scenario'=>'create']);

//用於更新

$模型= $這 - > findModel($ ID);

$ model-> scenario ='update';

+0

添加代碼後使用'on'=>'update',但它不起作用。 –