Готовый REST API, работает больше полугода. И тут начались странности в фронтэндом. Решил на бэке сделать вывод в логи содержимого POST запроса из одного контроллера. И вот тут уже начались странности с CORS.
Контроллер представлял собой практически пустую болванку
Код: Выделить всё
<?php
namespace api\controllers;
use api\components\RestJWTActiveController;
use api\models\MsoLadaSitechecks;
class MsoladasitechecksController extends RestJWTActiveController
{
public $modelClass = MsoLadaSitechecks::class;
}
Код: Выделить всё
[
'class' => UrlRule::class, 'controller' => 'msoladasitechecks', 'pluralize' => false,
],
Код: Выделить всё
class RestJWTActiveController extends ActiveController
{
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'items',
];
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['access'] = [
'class' => 'yii\filters\ContentNegotiator',
'formats' => [
'application/json' => Response::FORMAT_JSON,
'application/xml' => Response::FORMAT_JSON,
]
];
$behaviors['authenticator'] = [
'class' => JwtHttpBearerAuth::class,
'optional' => [
'options'
]
];
$behaviors['corsFilter'] = [
'class' => \yii\filters\Cors::class,
'cors' => [
'Origin' => ['*'],
'Access-Control-Allow-Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Allow-Credentials' => null,
'Access-Control-Allow-Headers' => [
'Access-Control-Allow-Headers',
'Origin',
'Accept',
'X-Requested-With',
'Content-Type',
'Access-Control-Request-Method',
'Access-Control-Request-Headers',
'Authorization',
'Refresh-Token',
],
],
];
return $behaviors;
}
Это цветочки. Ягодки начались после попытки в beforeAction вывести в лог соержимое запроса. То есть теперь такой контроллер выдает CORS error
Код: Выделить всё
<?php
namespace api\controllers;
use api\components\RestJWTActiveController;
use api\models\MsoLadaSitechecks;
class MsoladasitechecksController extends RestJWTActiveController
{
public $modelClass = MsoLadaSitechecks::class;
public function beforeAction($action)
{
if($action->id='create'){
\Yii::error(\Yii::$app->request->post(),'before_action_post');
}
return parent::beforeAction($action); // TODO: Change the autogenerated stub
}
}
Есть похожий контроллер, но там используется afterAction, замена в текущем контроллере на afterAction снимает проблему с CORS. Непонятно, почему. И как теперь быть, если надо обработать данные перед вызовом какого либо метода?