melomaniac
(Melomaniac2012)
November 18, 2013, 11:03am
1
Все добрый день. Имеется два правила в urlManager:
'rules'=>array(
'<slug:[a-zA-Z0-9-.]+>'=>'items/view',
'<slug:[a-zA-Z0-9-.]+>'=>'pages/view',
Проблема в том что они усердно не хотят работать вместе, а самое интересное, что учитывается их порядок, первым читается нижнее. Т.е. в таком порядке, как я написал, будет работать ‘pages/view’, но ‘items/view’ не будет, если переставлю их местами:
'<slug:[a-zA-Z0-9-.]+>'=>'pages/view',
'<slug:[a-zA-Z0-9-.]+>'=>'items/view/',
То ‘pages/view’ работать не будет, но будет работать ‘items/view/’
Ну, во-первых, знак минуса и точку лучше экранировать.
Во-вторых, вот http://www.yiiframework.com/forum/index.php/topic/48670-очередность-правил-для-url/
Ну и вместо a-z0-9 можно использовать \w, который равен в точности [A-Za-z0-9_]
melomaniac
(Melomaniac2012)
November 18, 2013, 11:24am
3
Спасибо, читал.
Даже если экшины разные, все равно не работает, т.е к примеру такой вариант не работает:
'<slug:[a-zA-Z0-9-.]+>'=>'items/test',
'<slug:[a-zA-Z0-9-.]+>'=>'pages/view',
Ну так Вы сделали правило, которое жрёт вообще всё.
Конкретизируйте, какие урлы хотите иметь и куда они должны при этом вести.
melomaniac
(Melomaniac2012)
November 18, 2013, 12:25pm
5
Ну так Вы сделали правило, которое жрёт вообще всё.
Конкретизируйте, какие урлы хотите иметь и куда они должны при этом вести.
Хочу получить url такого вида http://localhost/stroitelstvo.html . Использую вот это расширение http://www.yiiframework.com/extension/yiibehaviorsluggable/ . Url хранится в БД в таком виде stroitelstvo.html к примеру, т.е. html это не url suffix. Интересно что первое правило для категорий:
'<slug:[a-zA-Z0-9-]+>'=>'categories/view',
работает отлично. Ну и весь код urlManager сейчас выглядит так:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'<slug:[a-zA-Z0-9-]+>'=>'categories/view',
'<slug:[a-zA-Z0-9-.]+>'=>'pages/view',
'<slug:[a-zA-Z0-9-.]+>'=>'items/view',
),
),
Для ясности имеет смысл переписать правило
'<slug:[a-zA-Z0-9\-]+\.html>'=>'categories/view'
melomaniac
(Melomaniac2012)
November 18, 2013, 1:20pm
7
Спасибо, прошу прощения, забыл уточнить, в идеале я хочу получить для категорий url вида /localhost/obekty, а для записей(новостей к примеру) и страниц вида /localhost/stroitelstvo.html. Т.е. у меня сейчас три модели - категории(/localhost/obekty), записи и страницы(/localhost/obekty.html). Я вот думаю может забить уже и совместить записи и страницы, т.е. страницы выкинуть и использовать вместо их одиночную запись, полдня сижу уже с этими url
Жопа в том, что урлы вида /localhost/obekty очень мерзко отделяются от стандартных урлов.
То есть, надо дать Yii понять, что obekty - это не контроллер и не модуль.
Всеперехватывающие регэкспы будут только мешать.
Варианты такие:
либо префикс/суффикс (как, например, .html)
либо первым правилом прописать все возможные контроллеры, а ближе к концу - уже вот такое
либо сделать class-based rule и лазить в какой-нибудь конфиг.
Последний вариант - это overkill, но дает лишнюю нагрузку.
andy_s
(Arekandrei)
November 18, 2013, 3:38pm
10
Наверное, так
'<slug:[a-zA-Z0-9\-]+>'=>array('categories/view', 'urlSuffix'=>'.html')
melomaniac
(Melomaniac2012)
November 18, 2013, 4:40pm
12
Проверил, работает, толку только с этого
andy_s
(Arekandrei)
November 18, 2013, 6:00pm
13
Чтобы .html не попадал в значение slug?
melomaniac
(Melomaniac2012)
November 18, 2013, 6:33pm
14
Не, я .html храню вместе с url в бд, т.е. в БД у меня ссылки вида item.html. Снес я страницы, оставил записи и категории.
P.S: Плюсик не могу поставить, позитив закончился “Action failed: You have reached your quota of positive votes for the day”