2013-02-13 2 views
3

есть способ в Yii, чтобы параметры неограниченныхYii urlManager неограниченных параметров

, например, я модуль/администратор/

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName'=>false, 
    'caseSensitive'=>false, 
    'rules'=>array(
     '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',     
     'admin/<controller:\w+>/<action:\w+>/<id:\d+>' => 'admin/<controller>/<action>', 
     'admin/<controller:\w+>/<action:\w+>'=>'admin/<controller>/<action>',   
    ), 
), 

и в модуле администратора мне нужен, что каждое действие может иметь неограниченное параметры, например:

/admin/anycontroller/anyaction/anything 
/admin/anycontroller/anyaction/anything/anything2 
/admin/anycontroller/anyaction/anything/anything2/anything3 
/admin/anycontroller/anyaction/anything/anything2/anything3/anything4 
... and so on 

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

и как поймать его на контроле?

ответ

5

Существует ярлык:

'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>' 

т.е. добавить правило с /*

Поскольку это более общее правило, которое может поймать много URLs, было бы лучше, чтобы он в нижней части, или по крайней мере после каких-либо конкретных правил, а именно:

// ... other specific rules ... 
'<controller:\w+>/<action:\w+>/<id:\w+>'=>'<controller>/<action>', // specifically for id 
// ... other specific rules ... 
'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>' 

в вашем случае:

'<controller:\w+>/<id:\d+>'=>'<controller>/view', 
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
'admin/<controller:\w+>/<action:\w+>/<id:\d+>' => 'admin/<controller>/<action>', 
'admin/<controller:\w+>/<action:\w+>'=>'admin/<controller>/<action>', 
'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>' 

Чтобы поймать его в действии, только не нужно задавать какие-либо параметры для действия, например, так:

public function actionSomething() { 
    // instead use $_GET 
    $params=$_GET; 

} 

Но он должен также работать с определением, что у вас уже есть: public function actionAnyAction($id=0,$type='',$type2='')

+0

Я не знаю, почему он не работает, когда внутри модуля. – Kokizzu

+0

hmm, что происходит, когда вы используете его внутри модуля? edit: как в каких URL-адресах вы получаете, если используете createUrl? или что-то еще, что говорит вам, что оно не работает? –

+1

я обновил ответ для модуля, пожалуйста, проверьте –

Смежные вопросы