/
v.bolshakov
/
AIEcosystem-Testing
Обзор
Документация
Войти
/
v.bolshakov
/
AIEcosystem-Testing
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
api/controllers/base/BaseController.php
177 строк
4 KB
Developer
Initial commit
03 авг 2026, 17:43
03 авг 2026, 17:43
7433917
Код
Авторство
О чём код?
<?php namespace api\controllers\base; use common\components\Connection; use common\forms\base\BaseModel; use common\helpers\GtpHelper; use Yii; use yii\base\Action; use yii\filters\AccessControl; use yii\filters\auth\CompositeAuth; use yii\filters\auth\HttpHeaderAuth; use yii\filters\Cors; use yii\helpers\ArrayHelper; use yii\rest\ActiveController; use yii\web\BadRequestHttpException; /** * Базовый контроллер для работы с API * * Class BaseController * @package api\controllers\base */ class BaseController extends ActiveController { /** * {@inheritdoc} */ public $serializer = 'api\components\ApiSerializer'; /** * Объект для серелизации * @var null */ protected $_serializer = null; /** * {@inheritdoc} */ public $modelClass = 'api\forms\base\BaseModel'; /** * {@inheritdoc} */ public $updateScenario = BaseModel::SCENARIO_UPDATE; /** * {@inheritdoc} */ public $createScenario = BaseModel::SCENARIO_CREATE; /** * @var array */ protected $section_id = []; /** * @var string */ protected $roles = ''; /** * {@inheritdoc} */ public function behaviors() { return ArrayHelper::merge(parent::behaviors(), [ // add CORS filter 'Cors' => [ 'class' => Cors::class, ], 'AuthFilter' => [ 'class' => CompositeAuth::class, 'authMethods' => [ 'HttpHeaderAuth' => [ 'class' => HttpHeaderAuth::class, 'header' => 'hub-key', ], ], ], 'AccessControl' => [ 'class' => AccessControl::class, 'rules' => [ [ 'allow' => true, 'roles' => ['@'] ] ], ] ]); } /** * {@inheritdoc} */ public function actions() { return ArrayHelper::merge(parent::actions(), [ 'create' => [ 'class' => 'api\components\CreateAction', ], 'view' => [ 'findModel' => [$this, 'findModel'], ], 'update' => [ 'findModel' => [$this, 'findModel'], ], 'delete' => [ 'findModel' => [$this, 'findModel'], ], ]); } /** * {@inheritdoc} */ public function beforeAction($action) { /** @var Connection $db */ $db = Yii::$app->db; $db->pingRepeat(); /** @var Action $action */ $parent = parent::beforeAction($action); Yii::info($action->uniqueId, 'api'); GtpHelper::updateLang(); return $parent; } /** * {@inheritdoc} */ protected function verbs() { return [ 'index' => ['GET', 'OPTIONS'], 'view' => ['GET', 'OPTIONS'], 'create' => ['POST', 'OPTIONS'], 'update' => ['PUT', 'OPTIONS'], 'delete' => ['DELETE', 'OPTIONS'], ]; } /** * @inheritdoc */ protected function serializeData($data) { if (!$this->_serializer) { $this->_serializer = Yii::createObject($this->serializer); $this->_serializer->collectionEnvelope = 'items'; } return $this->_serializer->serialize($data); } /** * Получить переменную из боди-запроса * * @param string $param_name Название переменной * @param null|string $bad_request_message Сообщение, которое нужно передать в исключение - если переменная не задана * @return mixed|null * @throws BadRequestHttpException */ protected function getBodyValue($param_name, $bad_request_message = null) { $value = Yii::$app->request->getBodyParam($param_name); if (!$value and $bad_request_message) { throw new BadRequestHttpException(Yii::t('app', $bad_request_message)); } return $value; } }