<?php namespace frontend\controllers; use core\forms\SubscribeForm; use core\services\newsletter\Newsletter; use frontend\components\FrontendController; use yii\filters\VerbFilter; use yii\filters\AccessControl; use frontend\components\SiteAccess; use Yii; /** * Site controller */ class SiteController extends FrontendController { public $newletter; public function __construct( string $id, $module, Newsletter $newsletter, array $config = [] ) { parent::__construct( $id, $module, $config ); $this->newletter = $newsletter; } /** * @inheritdoc */ public function behaviors() { return [ 'access' => [ 'class' => AccessControl::class, 'only' => ['subscribe'], 'rules' => [ [ 'actions' => ['subscribe'], 'allow' => true, ], ], ], 'verbs' => [ 'class' => VerbFilter::class, 'actions' => [ 'logout' => ['post'], ], ], SiteAccess::class, ]; } /** * @inheritdoc */ public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ], 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 'transparent' => true, ], ]; } /** * Displays homepage. * * @return mixed */ public function actionIndex() { $this->layout = 'home'; return $this->render('index'); } public function actionSubscribe() { Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; $form = new SubscribeForm(); if(Yii::$app->request->isAjax && $form->load(Yii::$app->request->post())){ try { $this->newletter->subscribe( $form->email ); return [ 'result' => 'success' ]; } catch (\RuntimeException $e) { return [ 'result' => 'error', 'message' => $e->getMessage() ]; } } return ['result' => 'error', 'message' => 'Request error']; } }