Urlmanager

Все добрый день. Имеется два правила в 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/’ :blink:

Ну, во-первых, знак минуса и точку лучше экранировать.

Во-вторых, вот http://www.yiiframework.com/forum/index.php/topic/48670-очередность-правил-для-url/

Ну и вместо a-z0-9 можно использовать \w, который равен в точности [A-Za-z0-9_]

Спасибо, читал.

Даже если экшины разные, все равно не работает, т.е к примеру такой вариант не работает:




'<slug:[a-zA-Z0-9-.]+>'=>'items/test',

'<slug:[a-zA-Z0-9-.]+>'=>'pages/view',



Ну так Вы сделали правило, которое жрёт вообще всё.

Конкретизируйте, какие урлы хотите иметь и куда они должны при этом вести.

Хочу получить 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'

Спасибо, прошу прощения, забыл уточнить, в идеале я хочу получить для категорий url вида /localhost/obekty, а для записей(новостей к примеру) и страниц вида /localhost/stroitelstvo.html. Т.е. у меня сейчас три модели - категории(/localhost/obekty), записи и страницы(/localhost/obekty.html). Я вот думаю может забить уже и совместить записи и страницы, т.е. страницы выкинуть и использовать вместо их одиночную запись, полдня сижу уже с этими url :(

Жопа в том, что урлы вида /localhost/obekty очень мерзко отделяются от стандартных урлов.

То есть, надо дать Yii понять, что obekty - это не контроллер и не модуль.

Всеперехватывающие регэкспы будут только мешать.

Варианты такие:

  • либо префикс/суффикс (как, например, .html)

  • либо первым правилом прописать все возможные контроллеры, а ближе к концу - уже вот такое

  • либо сделать class-based rule и лазить в какой-нибудь конфиг.

Последний вариант - это overkill, но дает лишнюю нагрузку.

Спасибо, понял :D

Наверное, так :)


'<slug:[a-zA-Z0-9\-]+>'=>array('categories/view', 'urlSuffix'=>'.html')

Ээээм. Мда?

Проверил, работает, толку только с этого :blink:

Чтобы .html не попадал в значение slug?

Не, я .html храню вместе с url в бд, т.е. в БД у меня ссылки вида item.html. Снес я страницы, оставил записи и категории.

P.S: Плюсик не могу поставить, позитив закончился “Action failed: You have reached your quota of positive votes for the day” ;D