ff81af45
Alexey Boroda
-Languages in pro...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<?php
namespace frontend\components;
use artbox\core\models\Alias;
use artbox\core\services\Languages;
use yii\helpers\Json;
use yii\web\Request;
/**
* Url manager extended to work with aliases and languages
*
* @package artbox\core\seo
*/
class UrlManager extends \yii\web\UrlManager
{
/**
* @var bool
*/
public $hideDefaultLanguagePrefix = false;
/**
* @see \yii\web\UrlManager
* @var bool
*/
public $enablePrettyUrl = true;
/**
* @see \yii\web\UrlManager
* @var bool
*/
public $showScriptName = false;
/**
* @var \artbox\core\services\Languages
*/
protected $languages;
/**
* UrlManager constructor.
*
* @param \artbox\core\services\Languages $languages
* @param array $config
*/
public function __construct(Languages $languages, array $config = [])
{
$this->languages = $languages;
parent::__construct($config);
}
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
51
|
|
ff81af45
Alexey Boroda
-Languages in pro...
|
52
53
54
55
56
57
58
59
60
|
/**
* @param \yii\web\Request $request
*
* @return array|bool
* @throws \artbox\core\exceptions\AliasOverwriteException
* @throws \yii\base\InvalidConfigException
*/
public function parseRequest($request)
{
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
61
|
// $this->checkRedirect($request->url);
|
ff81af45
Alexey Boroda
-Languages in pro...
|
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
$request = $this->parseLanguage($request);
/**
* @var Alias $alias
*/
$alias = Alias::find()
->where(
[
'value' => trim($request->pathInfo, '/'),
]
)
->andWhere(
[
'language_id' => $this->languages->getCurrent()->id,
]
)
->one();
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
80
|
if ($alias !== null) {
|
ff81af45
Alexey Boroda
-Languages in pro...
|
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
$params = Json::decode($alias->route);
$route = array_shift($params);
/**
* @todo REFACTOR AS SOO AS POSIBLE!
* remove service locator, and implement Dependency Injection
* @var \artbox\core\components\SeoComponent $seo
*/
$seo = \Yii::$app->get('seo');
$seo->setAlias($alias);
return [
$route,
$params,
];
}
return parent::parseRequest($request);
}
/**
* @param array|string $params
*
* @return string
*/
public function createUrl($params)
{
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
108
109
110
111
112
113
114
|
if ($this->hideDefaultLanguagePrefix && ( $this->languages->getCurrent(
)->url == $this->languages->getDefault()->url )) {
$prefix = '';
} else {
$prefix = '/' . $this->languages->getCurrent()->url;
}
|
ff81af45
Alexey Boroda
-Languages in pro...
|
115
116
|
if (isset($params[ 'alias' ])) {
if ($params[ 'alias' ] instanceof Alias) {
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
117
|
return $prefix . '/' . $params[ 'alias' ]->value;
|
ff81af45
Alexey Boroda
-Languages in pro...
|
118
|
} elseif (is_array($params[ 'alias' ])) {
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
119
|
return $prefix . '/' . $params[ 'alias' ][ 'value' ];
|
ff81af45
Alexey Boroda
-Languages in pro...
|
120
121
122
|
}
}
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
123
|
return $prefix . parent::createUrl($params);
|
ff81af45
Alexey Boroda
-Languages in pro...
|
124
125
126
|
}
/**
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
127
|
* @param $request
|
ff81af45
Alexey Boroda
-Languages in pro...
|
128
|
*
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
129
130
|
* @return mixed
* @throws \yii\base\ExitException
|
ff81af45
Alexey Boroda
-Languages in pro...
|
131
132
133
134
135
136
137
|
* @throws \yii\base\InvalidConfigException
*/
protected function parseLanguage($request)
{
$split = explode('/', $request->pathInfo);
if (in_array($split[ 0 ], array_keys($this->languages->getActive()))) {
if ($this->hideDefaultLanguagePrefix && ( $split[ 0 ] == $this->languages->getDefault()->url )) {
|
d612f670
Anastasia
- menu
|
138
|
|
ff81af45
Alexey Boroda
-Languages in pro...
|
139
140
141
142
|
unset($split[ 0 ]);
\Yii::$app->response->redirect('/' . implode('/', $split), 301)
->send();
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
143
|
\Yii::$app->end();
|
ff81af45
Alexey Boroda
-Languages in pro...
|
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
} else {
$this->languages->setCurrent($split[ 0 ]);
unset($split[ 0 ]);
$request->setPathInfo(implode('/', $split));
}
} else {
if ($this->hideDefaultLanguagePrefix) {
$this->languages->setCurrentDefault();
} else {
\Yii::$app->response->redirect(
'/' . $this->languages->getDefault()->url . '/' . implode('/', $split),
301
)
->send();
|
6b9d55c2
Alexey Boroda
-Languages ready ...
|
160
|
\Yii::$app->end();
|
ff81af45
Alexey Boroda
-Languages in pro...
|
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
}
}
return $request;
}
/**
* Looks for rule in table(column) `redirect.from` if findes -
* redirects to `redirect.to`
*
* @param string $url
*/
protected function checkRedirect(string $url)
{
// $redirect = Redirect::find()
// ->where(
// [
// 'from' => $url,
// ]
// )
// ->one();
//
// if ($redirect) {
// \Yii::$app->response->redirect($redirect->to)
// ->send();
// }
}
}
|