12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- /**
- * Author: Eugine Terentev <eugine@terentev.net>
- */
- namespace plugins\locale;
- use Yii;
- use yii\base\Action;
- use yii\base\InvalidParamException;
- use yii\web\Cookie;
- /**
- * Class SetLocaleAction
- * @package common\actions
- *
- * Example:
- *
- * public function actions()
- * {
- * return [
- * 'set-locale'=>[
- * 'class'=>'common\actions\SetLocaleAction',
- * 'locales'=>[
- * 'en-US', 'ru-RU', 'ua-UA'
- * ],
- * 'localeCookieName'=>'_locale',
- * 'callback'=>function($action){
- * return $this->controller->redirect(/.. some url ../)
- * }
- * ]
- * ];
- * }
- */
- class SetLocaleAction extends Action
- {
- /**
- * @var array List of available locales
- */
- public $locales;
- /**
- * @var string
- */
- public $localeCookieName = '_locale';
- /**
- * @var integer
- */
- public $cookieExpire;
- /**
- * @var string
- */
- public $cookieDomain;
- /**
- * @var \Closure
- */
- public $callback;
- /**
- * @param $locale
- * @return mixed
- */
- public function run($locale)
- {
- if (!is_array($this->locales) || !in_array($locale, $this->locales, true)) {
- throw new InvalidParamException('Unacceptable locale');
- }
- $cookie = new Cookie([
- 'name' => $this->localeCookieName,
- 'value' => $locale,
- 'expire' => $this->cookieExpire ?: time() + 60 * 60 * 24 * 365,
- 'domain' => $this->cookieDomain ?: '',
- ]);
- Yii::$app->getResponse()->getCookies()->add($cookie);
- if ($this->callback && $this->callback instanceof \Closure) {
- return call_user_func_array($this->callback, [
- $this,
- $locale
- ]);
- }
- return Yii::$app->response->redirect(Yii::$app->request->referrer ?: Yii::$app->homeUrl);
- }
- }
|