2014-01-22 2 views
0

Я хотел бы использовать правило catch для всего urlManager, которое передало бы что-либо после моего базового url на контроллер и метод по умолчанию в качестве параметров.Пропустить параметр к контроллеру/методу по умолчанию с Yii urlManager

Моя цель была бы для URL-адреса, такого как mysite.com/123, для сопоставления с mysite.com/controller/method/123, где контроллер/метод предопределен, и 123 передается как именованный параметр.

Такое правило будет помещено последним в цепочке urlManager, так что, если ни одно из других правил не будет соответствовать ему, будет передано все, что после базового url, на мой выбранный контроллер/метод.

Любые идеи?

Edit: Добавление правила '<id>'=>'controller/method' (который я думаю, что я пытался так или иначе), а затем просмотр site.com/123 будет возвращать 404 не найдено, но от апача, НЕ Yii. Что-то я не принимал во внимание.

Переход к mysite.com/index.php/123 получил желаемый результат. Переход на mysite.com/controller/method, хотя и правильно проложил бы URL. Strange ...

ответ

0

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

'<id>' => 'controllerName/methodName/<id>,' 

Пример:

'<id>' => 'user/view/<id>', 

Это позволит перенаправить все URL-адреса, как это:

mysite.com/1 

Кому:

mysite.com/user/view/1 

Если вы хотите ограничить к номерам только используйте

'<id:\d+>' => 'controllerName/methodName/<id>,' 
0

Вы должны добавить это правило донизу правил URL:

'urlManager'=>array(
    'urlFormat'=>'path', 
    'rules'=>array(
    '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
    '<pname:\w+>'=>'site/test', 
), 
), 

PNAME: ваш именованный параметр. Сайт/тест: целевое действие.

В ваших действий, вы должны определить свой "PNAME" в качестве метода параметра Я:

public function actionTest($pname) { 
    echo "Name:$pname"; 
} 
Смежные вопросы