Как производить валидацию входящих данных в 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;
}