/
pashko
/
siec
Обзор
Документация
Войти
/
pashko
/
siec
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
frontend/controllers/ApiController.php
268 строк
7 KB
Кокорин Павел
image to cache
17 ноя 2021, 10:52
17 ноя 2021, 10:52
9d7d17a
Код
Авторство
О чём код?
<?php namespace frontend\controllers; use common\models\Banner; use common\models\Blog; use common\models\Pluses; use common\models\Service; use common\models\Worker; use dvizh\gallery\models\Image; use yii\helpers\Url; use Yii; use yii\web\Controller; use common\models\Pages; use yii\data\Pagination; /** * Api controller */ class ApiController extends Controller { /** * @inheritdoc */ public function beforeAction($action) { $this->enableCsrfValidation = false;//отключаем проверку Csrf $this->headers(); return parent::beforeAction($action); } /** * @return array */ public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ] ]; } /** * @param int $limit * @param string $size * @param int $page * @return false|string */ public function actionNews($limit = 10, $size = '880x440') { Yii::$app->response->format = \yii\web\Response::FORMAT_RAW; Yii::$app->response->headers->add('Content-Type', 'application/json'); $items = []; $query = Blog::find()->where(['active' => 'yes']); $countQuery = clone $query; $pages = new Pagination([ 'totalCount' => $countQuery->count(), 'defaultPageSize' => $limit ]); $models = $query->offset($pages->offset) ->limit($limit) ->all(); foreach ($models as $blog) { $items[] = [ 'title' => $blog['name'], 'short_text' => $blog['short_text'], 'imageSrc' => Yii::$app->cache->getOrSet($blog->image->getUrl($size), function() use ($size, $blog) { return $blog->image->getUrl($size); }), 'slug' => Url::to(['/news/' . $blog['slug']]), ]; } if (!empty($items)) { return json_encode($items); } return 'empty'; } /** * @param $slug * @return false|string */ public function actionNewsView($slug) { $this->headers(); if ($model = Blog::find()->where(['slug' => $slug])->one()) { return json_encode([ 'id' => $model->id, 'name' => $model->name, 'short_text' => $model->short_text, 'slug' => $model->slug, 'text' => $model->text, 'images' => array_map(function($image) { return $image->getUrl('300x300'); }, $model->images), ]); } return 'empty'; } /** * @return false|string */ public function actionPluses() { $this->headers(); $models = Pluses::find()->where(['active' => 'yes'])->asArray()->limit(4)->all(); if(!empty($models)) return json_encode($models); } /** * */ public function headers() { Yii::$app->response->format = \yii\web\Response::FORMAT_RAW; Yii::$app->response->headers->add('Content-Type', 'application/json'); } /** * @return array */ public function actionMenuTop() { return json_encode(array_map(function($model){ return [ 'title' => $model->menu_title ?: $model->title, 'id' => $model->id, 'slug' => Url::to(['/' . $model->slug]), ]; }, Pages::find()->where(['active' => 'yes', 'in_menu' => true])->orderBy(['sort' => SORT_ASC])->all())); } /** * @return false|string */ public function actionServices() { $size = yii::$app->request->get('size') ?: '630x387'; return json_encode( array_map(function ($model) use ($size) { return [ 'id' => $model->id, 'name' => $model->small_name ?: $model->name, 'little_text' => $model->little_text, 'slug' => Url::to(['/service/' . $model->slug]), 'text' => $model->text, 'image' => $model->images[0]->getUrl($size), ]; }, Service::find()->where(['active' => 'yes'])->orderBy(['sort' => SORT_ASC])->all()) ); } /** * @param $slug * @return array|false|string */ public function actionServiceView($slug) { $this->headers(); if ($model = Service::find()->where(['slug' => $slug, 'active' => 'yes'])->asArray()->one()) return json_encode($model); return []; } /** * @param $slug * @return array|false|string */ public function actionPageView($slug) { $this->headers(); if ($model = Pages::find()->where(['slug' => $slug, 'active' => 'yes'])->asArray()->one()) return json_encode($model); return []; } /** * @return array|false|string */ public function actionBanner() { $this->headers(); if ($id = yii::$app->request->get('id')) { $query = Banner::find()->where(['id' => $id]); $query2 = clone $query; if ($model = $query->asArray()->one()) { $result = $model; $images = array_map(function ($model) { return ['image_url' => $model->getUrl('1920x1080'),]; }, $query2->one()->images); return json_encode($result + $images[0]); } } return []; } public function actionWorker() { $this->headers(); $size = yii::$app->request->get('size') ?: '280x340'; return json_encode(array_map(function ($model) use ($size) { return [ 'id' => $model->id, 'name' => $model->name, 'image' => $model->images[0]->getUrl($size), ]; }, Worker::find()->orderBy('RAND()')->limit(4)->all())); } public function actionPopular() { $this->headers(); $size = yii::$app->request->get('size') ?: '280x140'; return json_encode(array_map(function ($model) use ($size) { return [ 'id' => $model->id, 'title' => $model->name, 'image' => $model->images[0]->getUrl($size), 'slug' => Url::to(['/news/' . $model->slug]), ]; }, Blog::find()->orderBy('RAND()')->limit(4)->all())); } /*public function actionFeedback() { $data = json_decode(file_get_contents('php://input'), true); $mailer = Yii::$app->mailer->compose([ 'html' => 'feedback-html', 'text' => 'feedback-text' ], [ 'data' => $data, ]) ->setTo([ 'test@siec.ru' ]) ->setFrom(['no-reply@siec.ru' => 'Автоматическое уведомление']) ->setSubject('Заявка с сайта siec.ru') ->send(); }*/ /** * @param $code * @return false|string */ public function actionMeta($code) { $model = Pages::findOne(['code' => $code]); return json_encode([ 'id' => $model->id, 'title' => $model->seo->title ?: $model->title, 'description' => $model->seo->description ?: $model->short_text, ]); } }