Управление URL в Yii: контроллер / действие / идентификатор в / идентификатор

Можем ли мы отобразить URL в форматеcontroller/action/id в/id в Yii? Кроме того, одной из основных проблем является то, что мне нужно делать это только на конкретном контроллере / действии.

Для экземпляра: если у меня есть/user/post/ujjwal тогда мне нужно показать/ujjwal только. И когда у меня есть/image/display/ujjwal тогда может быть как есть?

Я прочитал управление URL в Yii и понял, что там показано. Но я не знаю, как управлять URL на основеcontroller/action.

Любая помощь будет признательна.

Спасибо, Уджвал

 Ujjwal Prajapati06 июн. 2012 г., 12:16
то, что я имел в виду, было, я не мог найти возможное близкое решение моей проблемы .. или, возможно, я не понимал это настолько хорошо, что я не мог связать это с моей проблемой ...
 Orlymee06 июн. 2012 г., 11:54
Вы прокомментировали одну из ссылок, что документация yii не является решением вашей проблемы. Пожалуйста, опубликуйте отрывок из вашего конфигурационного файла, касающийся форматирования URL.

Ответы на вопрос(3)

что вы хотите, может быть сделано, но с несколькими побочными эффектами. Если вы положите это в свойconfig/main.php:

        'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            'image/<action>/<username>' => 'image/action/username',
            '<username>' => 'user/post/username',
            ),
        ),

Сначала поставьте все свои более конкретные правила, затем все остальное, что является единым целым, перейдет к/user/post/something.

вы не можете сопоставить один настроенный URL-адрес двум или более URL-адресам или действиям. Например, когда кто-то имеет доступ к/my_username будет перенаправлен на/user/post/ujjwal или/image/display/ujjwal. Приложение будет сбит с толку из-за этого шаблона / правил.

Так что я рекомендую вам поменять/image/display/ujjwal другой шаблон / правила. Подобно/my_username/image

Я используюusername как строка запроса для выбранного имени пользователя.

'components'=>array(

            .....

            'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                '<username:[\w.]+>'=>'user/post',
                '<username:[\w.]+>/display'=>'image/display',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

            ....

Кто-то задавал этот похожий вопрос раньше: Как указать дружественный к SEO URL-адрес, такой как твиттер www.twitter.com/ <name>, используя YII framework

 Ujjwal Prajapati06 июн. 2012 г., 18:53
Спасибо. Это очень полезно, и я следовал твоим инструкциям. Оно работает!
 aslingga07 июн. 2012 г., 05:32
@ UjjwalPrajapati Круто !!!
Решение Вопроса

В вашемconfig/main.php пытатьс

'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName'=>false,
                        'rules'=>array(
                          'user/post/<user:\w+>'=>'<user>', //this should be the very first rule
                           //other rules 
                         ),
            ),
        ),
 Ansari06 июн. 2012 г., 17:45
Это наоборот: клиентский URI идет первым в массиве, затем пара контроллер / действие. Кроме того, размещение самого общего правила наверху гарантирует, что ни одно из других правил никогда не будет выполнено.
 Ujjwal Prajapati07 июн. 2012 г., 06:23
Да, я просто хочу, чтобы имя пользователя отображалось в user / profile / username и, как подсказывает aslingga, оно работало отлично. Спасибо за помощь ребята!
 Ansari06 июн. 2012 г., 19:40
Да, но OP не хочет получать доступ к действию / user / post таким образом - он только хочет, чтобы имя параметра было в URL.
 Rahul Thakur04 июл. 2012 г., 15:10
Хммм ... почему этот ответ не был принят, в любом случае я хотел сделать что-то вроде @UjjwalPrajapati только для определенного URL, и этот способ указания правила сработал ... Спасибо
 adamors06 июн. 2012 г., 19:34
Думаю, ты путаешь слово с общим словом.user/post/<user:\w+> будет соответствовать толькоuser контроллерpost действие, когда у него есть параметр слова.

Ваш ответ на вопрос