Witam, męczę moduł Yii User http://www.yiiframework.com/extension/yii-user/
i chciałbym zmienić adres url:
/user/user/view?id=62
na:
/users/nazwa_użytkownika
Męczy mnie to już drugi dzień
Zna ktoś odpowiedź?
Witam, męczę moduł Yii User http://www.yiiframework.com/extension/yii-user/
i chciałbym zmienić adres url:
/user/user/view?id=62
na:
/users/nazwa_użytkownika
Męczy mnie to już drugi dzień
Zna ktoś odpowiedź?
Cześć
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'users/kowalski' => 'site/test/id/123',
'users/<id:\w+>' => 'site/test',
//'<controller:\w+>/<id:\d+>'=>'<controller>/view',
//'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
//'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
[html]
<a href="<?php echo $this->createUrl(‘users/kowalski’) ?>">Kowalski</a>
[/html]
Dla wyjaśnienia powyższe reguły dla wywołania w linku:
.../users/kowalski uruchomią /site/test/id/123 ale w adresie przeglądarki zostanie .../users/kowalski.
W przypadku gdy wywołasz link
.../users/malinowski zastosowanie będzie miała druga reguła i zostanie uruchomiona .../site/test/id/malinowski a w adresie przeglądarki zostanie .../users/malinowski.
no to chyba tyle, na podstawie tutorialu http://www.yiiframework.com/doc/guide/1.1/pl/topics.url
Niestety nie działa…
Chciałem chociaż uprościć adres ale też nie działa…
Tutaj mam reguły dla modułu:
'<module:\w+>/<controller:\w+>/<action:\w+>'=>'<module>/<controller>/<action>', //Działa
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<module>/<controller>/<action>', //Nie działa...
'users'=>'user/user/index', //Działa
'users/<id:\d+>' => 'user/user/view', //Nie działa...
W jakiej kolejności ?
Wklej konfig urlmanagera cały.
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
//'useStrictParsing'=>true,
'rules'=>array(
'/' => 'site/index',
'about' => array('site/page', 'defaultParams' => array('view' => 'about')),
'regulamin' => array('site/page', 'defaultParams' => array('view' => 'regulamin')),
'faq' => array('site/page', 'defaultParams' => array('view' => 'faq')),
'post/page/<page:\d+>' => 'post/index',
'kontakt'=>'site/contact',
'opinia'=>'site/opinia',
'posty'=>'/post',
'<id:\d+>-<title:.*?>'=>'post/view',
'posts/<tag:.*?>'=>'post/index',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<action:(ogolne|hobby|zycie|rozrywka|gry)>'=>'post/<action>',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
//User module
'<module:\w+>/<controller:\w+>/<action:\w+>'=>'user/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'user/<controller>/<action>',
'users'=>'user/user/index',
'users/<id:\d+>' => 'user/user/view',
'users/<username:\w+>' => 'users/<id:\d+>',
),
),
Teoretycznie powinno działać chociaż
'users/<id:\d+>' => 'user/user/view',
ale niestety nie działa.
No cóż, co mogę Ci poradzić, zakomentuj pozostałe reguły i zacznij testować z pominięciem tej:
[php]
‘users/<username:\w+>’ => ‘users/<id:\d+>’,
[php]
bo co ta reguła ma robić ? moim zdaniem jest zła, nie może być ‘users/<id:\d+>’. Myślę, że chcesz aby urlManager robił zamianę id użytkownika na jego nazwisko, ale w tym przypadku musisz napisać swoją klasę http://www.yiiframework.com/doc/guide/1.1/en/topics.url#using-custom-url-rule-classes
Pamiętaj jednak o tym, że przesadzanie z regułami zmienijsza wydajność twojej aplikacji.
No nic kombinuję dalej…
Zależało mi, aby chociaż skrócić ten adres:
/user/user/view?id=62
do takiej postaci:
/users/62
ale nie działa
'users/<id:\d+>' => 'user/user/view',
Może ktoś jeszcze się wypowie dzięki.
w jaki sposob powstaje ten link ‘/user/user/view?id=62’ ?
u mnie działa bez problemu
[php]
Yii::app()->createUrl(‘site/test’, array(‘id’=>123)) // -> co generuje /users/123
[php]
[php]
‘users/<id:\d+>’ => ‘site/test’,
[php]
3.w przeglądarce za każdym razem mam adres /users/123
Dobra mam, zapewne używasz CGridView i od niego dostajesz adres ‘/user/user/view?id=62’
1 kolejność twoich regół powoduje że dostajesz właśnie taki adres ‘/user/user/view?id=62’ a nie ‘/user/user/view/id/62’
//User module
'<module:\w+>/<controller:\w+>/<action:\w+>'=>'user/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'user/<controller>/<action>',
'users'=>'user/user/index',
'users/<id:\d+>' => 'user/user/view',
'users/<username:\w+>' => 'users/<id:\d+>',
//User module
'users/<id:\d+>' => 'user/user/view',
'users'=>'user/user/index',
//'users/<username:\w+>' => 'users/<id:\d+>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'user/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>'=>'user/<controller>/<action>',
Niestety nie działa… coś jest nie tak z tym modułem yii-user ale nie mogę dojść gdzie…
Zmieniałem też w regułach <module:\w+>/ na user/ ale też nic… nie znam jeszcze na tyle Yii, aby określić w którym miejscu tworzy się ten adres… ciężka sprawa
Widget to CListView
Jeszcze coś wieczorem sprawdzę i dam znać, czy pomogło.
Działa!
Wystarczyło przenieść linijkę:
'users/<id:\d+>' => 'user/user/view',
na sam początek reguł…
do stworzenia adresu users/nazwaużytkownika już będzie więcej zabawy muszę napisać swoją klasę.
Dzięki pozdrawiam.