LanguageUrlManager.php 1.41 KB
<?php
    namespace artweb\artbox\language\components;
    
    use artweb\artbox\language\models\Language;
    use yii\web\NotFoundHttpException;
    use yii\web\UrlManager;
    
    class LanguageUrlManager extends UrlManager
    {
        /**
         * @var array
         */
        public $badGetParams = [];
        
        public function parseRequest($request)
        {
            foreach ($request->get() as $param => $value) {
                if (in_array($param, $this->badGetParams)) {
                    throw new NotFoundHttpException();
                }
            }
            
            return parent::parseRequest($request);
        }
        
        /**
         * @inheritdoc
         */
        public function createUrl($params)
        {
            if (isset($params[ 'language_id' ])) {
                
                $language = Language::findOne($params[ 'language_id' ]);
                if ($language === null) {
                    $language = Language::getDefaultLanguage();
                }
                unset($params[ 'language_id' ]);
            } else {
                
                $language = Language::getCurrent();
            }
            
            $url = parent::createUrl($params);
            
            if ($url == '/') {
                return '/' . $language->url;
            } else {
                return '/' . $language->url . $url;
            }
        }
    }