2016-10-01 7 views
0

私はYii 2.0アプリケーションを開発しています。このアプリケーションでは、ユーザーが注文を作成してレビューを送信し、その後、ワークフローのいくつかの段階に従います。Yii2コン​​トローラの動作確認

昨日まで、顧客は注文を見直すための注文を送る前に草案とみなされる可能性があることをすべて了承しています。つまり、作成時に検証を無効にし、ユーザーが[レビューに送信]ボタンをクリックしたときに検証する必要があります。私はYii 2.0がシナリオをサポートしていることを知っていますが、「レビューに送る」ボタンが読み取り専用のビューで表示されるため、多分シナリオは適用されません。これにより、send_to_reviewビューがないため、コントローラのアクション内で検証が行われます。これはどのようにして行うことができますか(コントローラーのアクション内でのモデル検証を意味します)?ここで

私は解決するために必要なもの、コントローラのアクションコード

public function actionSendToReview($id) 
{ 
    if (Yii::$app->user->can('Salesperson')) 
    { 
     $model = $this->findModel($id); 
     if ($model->orden_stage_id == 1 && $model->sales_person_id == Yii::$app->user->identity->id) 
     { 
      $model->orden_stage_id = 2; 
      $model->date_modified = date('Y-m-d h:m:s'); 
      $model->modified_by = Yii::$app->user->identity->username; 

      //TODO: Validation logic if is not valid show validation errors 
      //for example "For sending to review this values are required: 
      //list of attributes in bullets" 
      //A preferred way would be to auto redirect to update action but 
      //showing the validation error and setting scenario to    
      //"send_to_review". 


      $model->save(); 
      $this::insertStageHistory($model->order_id, 2); 
      return $this->redirect(['index']); 
     } 
     else 
     { 
      throw new ForbiddenHttpException(); 
     } 
    } 
    else 
    { 
     throw new ForbiddenHttpException(); 
    } 
} 

あるTODOです。 オプション1:同じビューに検証エラーが表示され、ユーザーが更新ボタンをクリックする必要があります。要求された値を変更して保存してから、もう一度レビューに送信してみてください。 オプション2:コントローラで検出されたシナリオおよび検証エラーを既に設定しているビューを更新ビューに自動的にリダイレクトします。

おかげで、

よろしく

答えて

0

あなたは、コントローラで検証に$model ->validate()を使用することができます。

public function actionSendToReview($id) 
{ 
    if (Yii::$app->user->can('Salesperson')) 
    { 
     $model = $this->findModel($id); 
     if ($model->orden_stage_id == 1 && $model->sales_person_id == Yii::$app->user->identity->id) 
     { 
      $model->orden_stage_id = 2; 
      $model->date_modified = date('Y-m-d h:m:s'); 
      $model->modified_by = Yii::$app->user->identity->username; 



      //TODO: Validation logic if is not valid show validation errors 
      //for example "For sending to review this values are required: 
      //list of attributes in bullets" 
      //A preferred way would be to auto redirect to update action but 
      //showing the validation error and setting scenario to    
      //"send_to_review". 

      //optional 
      $model->scenario=//put here the scenario for validation; 

      //if everything is validated as per scenario 
      if($model ->validate()) 
      {     
       $model->save(); 
       $this::insertStageHistory($model->order_id, 2); 
       return $this->redirect(['index']); 
      } 
      else 
      { 
       return $this->render('update', [ 
       'model' => $model, 
       ]); 
      } 


     } 
     else 
     { 
      throw new ForbiddenHttpException(); 
     } 
    } 
    else 
    { 
     throw new ForbiddenHttpException(); 
    } 
} 

あなたが任意のフィールドを検証しないためactionCreate() .Createシナリオでの検証が必要で、そこには適用されない場合は。

+0

正常に動作しますが、検証エラーが2回表示されます。奇妙な –

関連する問題