urlManager rules и кириллица

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Andy78
Сообщения: 26
Зарегистрирован: 2014.10.23, 10:46

urlManager rules и кириллица

Сообщение Andy78 »

Добрый день.
Подскажите пожалуйста, как надо прописать правило чтобы формировался урл вида "/blog/search/метка" ?
правило

Код: Выделить всё

'/blog/search/<tag:[a-zA-Zа-яА-Я0-9\_\+\-]{1,255}>' => '/blog/search',  
к сожалению не работает :(
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: urlManager rules и кириллица

Сообщение r3verser »

Кста посмотрел в сорец, это вроде баг в Yii2. В файле Yii2\web\UrlRule.php метод createUrl() строчка 316

Код: Выделить всё

if (isset($params[$name]) && !is_array($params[$name]) && ($rule === '' || preg_match($rule, $params[$name]))) {
В preg_match к $rule нужно добавить модификатор "u", чтобы он понимал юникод. Если сделать так

Код: Выделить всё

if (isset($params[$name]) && !is_array($params[$name]) && ($rule === '' || preg_match($rule . 'u', $params[$name]))) {
Тогда все робит.)
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: urlManager rules и кириллица

Сообщение r3verser »

Да, не вздумай патчить сорс фреймворка, просто напиши свой класс с UrlRule и переопредели метод createUrl()
Andy78
Сообщения: 26
Зарегистрирован: 2014.10.23, 10:46

Re: urlManager rules и кириллица

Сообщение Andy78 »

широ дякую :)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: urlManager rules и кириллица

Сообщение samdark »

https://github.com/yiisoft/yii2/blob/ma ... e.php#L194 и так всё нормально с юникодом. Проверил пример из сообщения Andy78, работает.

Изображение
Аватара пользователя
r3verser
Сообщения: 195
Зарегистрирован: 2012.04.01, 17:29
Откуда: Киев

Re: urlManager rules и кириллица

Сообщение r3verser »

Не работает, если по правилу Andy78 создать урл к примеру echo \yii\helpers\Url::to(['/blog/search', 'tag' => 'здесь-юникод']); то получим урл /blog/search?tag=здесь-юникод, вместо /blog/search/здесь-юникод. И если в UrlRule посмотреть переменную $rule то там будет #^[a-zA-Zа-яА-Я0-9\_\+\-]{1,255}$# а должно быть #^[a-zA-Zа-яА-Я0-9\_\+\-]{1,255}$#u.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: urlManager rules и кириллица

Сообщение samdark »

Хо, и правда. Фикснул https://github.com/yiisoft/yii2/commit/ ... c7596bb257. Спасибо.
Andy78
Сообщения: 26
Зарегистрирован: 2014.10.23, 10:46

Re: urlManager rules и кириллица

Сообщение Andy78 »

Когда обновится можно будет? ;)
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: urlManager rules и кириллица

Сообщение samdark »

В мой день рождения, если на 2.0.1 или сейчас, если на master.
igor3310
Сообщения: 75
Зарегистрирован: 2015.07.24, 10:33

Re: urlManager rules и кириллица

Сообщение igor3310 »

А для Yii 1 ка решить такую проблему?
Sonit
Сообщения: 2
Зарегистрирован: 2018.10.10, 09:55

Re: urlManager rules и кириллица

Сообщение Sonit »

Добрый день, в yii 2.0.15.1 - это сломали?
Pattern в url managerL

Код: Выделить всё

[
 'pattern' => '/blog/search/<tag:[a-zA-Zа-яА-Я0-9\_\+\-]{1,255}>',
 'route' => 'blog/search',
],

Код: Выделить всё

url: <?=Url::to(  ['/blog/search', 'tag' => 'метра'] );?>
Генерируется url вида: /blog/search?tag=%D0%BC%D0%B5%D1%82%D1%80%D0%B0

А должно /blog/search/%D0%BC%D0%B5%D1%82%D1%80%D0%B0

И второй смежный вопрос - есть url правило:

Код: Выделить всё

 '/news/<title:[a-zA-Zа-яА-Я0-9\_\+\-\s\.]{1,255}>' => '/news/view/',
Оно работает для всех строк, кроме тех, что оканчиваются точкой, как это исправить?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: urlManager rules и кириллица

Сообщение samdark »

Если это работало в 2.0.14, то да, сломали. Если не работало — нет, так и было. Проверьте.

Про точку сходу не отвечу. Надо рыть.
Ответить