Как производить валидацию входящих данных в YII2 для REST API?

Как производить валидацию входящих данных в YII2 для REST API?

Вот как это делается не в REST API:

Controller

<?php
namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Index__GET;

class SiteController extends Controller
{
 
      public function actionIndex($ch_name_url = null)
      {
        $model = new Index__GET();
        $model->ch_name_url = $ch_name_url;

           if($model->validate()){ 
               return $this->render('index');
           }   

      }
}

Model

<?php
namespace app\models;

use Yii;
use yii\base\Model;


class Index__GET extends Model
{

    public $ch_name_url;

    public function rules()
    {
        return [
            ['ch_name_url', 'trim'],


            ['ch_name_url', 'required'],

        ];
    }
}

И теперь в моделе происходит проверка если вызвать её в контроллере $model->validate(). А как проверять входящие данные в REST API, используя при этом yii\rest\Controller и yii\rest\ActiveController?


Ответы (1 шт):

Автор решения: fedornabilkin

В более менее крупных проектах коробочного варианта реста не хватает, поэтому сразу от него отказываются и делают свои экшены. Вот, например рестовый экшн для добавления товара к заказу.

public function actionCreate()
{
    $params = App::request()->bodyParams;
    $order = OrderService::findModel($params['orderId']);

    // Если не доставка и статус заказа не Изменен, то запрещаем добавление товара
    if (!$order->delivery || !$order->orderStatus()->canAddProduct()) {
        throw ExceptionFactory::actionDenied();
    }
    
    $orderProduct = new OrderProduct();
    
    // загрузка данных в модель и сохранение с валидацией
    if (!$orderProduct->load($params, '') || !$orderProduct->save()) {
        throw ExceptionFactory::incorrectData();
    }

    $this->createEventCallback($order);

    return $orderProduct;
}
→ Ссылка