2016-10-01 4 views
0

Я разрабатываю приложение Yii 2.0, в котором пользователи могут создавать заказы, а затем отправлять заказы на просмотр, после чего он следует за несколькими этапами рабочего процесса.Yii2 validation on controller action

Все до конца до вчерашнего дня, что клиент просит, чтобы перед отправкой заказов на рассмотрение заказа считались черновик. Это означает, что я должен отключить проверки для создания и проверки их, когда пользователи нажимают кнопку «Отправить на просмотр». Я знаю, что 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

Он работает нормально, но теперь ошибки проверки показаны дважды. странный –