На сайте везде используются человекопонятные URL. Но понадобилось сделать один URL, параметры в который будут передаваться через знак вопроса и ампераснды.
Пример кода:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'page<page:\d+>'=>'site/showpage',
'news<news:\d+>'=>'site/shownews',
'abc?id=<userId:\d+>&key=<secretKey:[a-z]+>'=>'site/abc',
'blog<post:\d+>'=>'site/showpost',
),
),
Если использовать createUrl(), чтобы создавать URL, тогда правило отрабатывает нормально. При вызове
Yii::app()->createUrl('site/abc', array('userId'=>123, 'secretKey'=>'secret',));
генерится URL: /abc?id=123&key=secret
Но вот при открытии страницы site.ru/abc?id=123&key=secret правило уже не отрабатывает.
Можно правда переписать правила следующим образом
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'page<page:\d+>'=>'site/showpage',
'news<news:\d+>'=>'site/shownews',
'abc?id=<userId:\d+>&key=<secretKey:[a-z]+>'=>'site/abc',
'abc'=>'site/abc',
'blog<post:\d+>'=>'site/showpost',
),
),
тогда при вызове site.ru/abc?id=123&key=secret сработает второе правило для abc и в actionAbc() нужно будет самому проверить $GET[‘id’] и $GET[‘key’], но это немного не красиво что-ли, да и не удобно.
Вопросы:
-
Почему не отрабатывает правило в первом случае?
-
Как сделать, чтобы работало правило (как в первом коде я указал)?