Yii User, Widok Usera

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ść

  1. w pliku /config/main



		'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>',

			),

		),



  1. tam gdzie chcesz używać adresu ‘users/kowalski’ robisz np.:

[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

  1. adresy generuję przez

[php]

Yii::app()->createUrl(‘site/test’, array(‘id’=>123)) // -> co generuje /users/123

[php]

  1. reguła w urlManager

[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+>',



  1. powinieneś zamienić kolejność regół na taką



//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>',



  1. generalnie kolejność ma duże znaczenie bo jak zostanie znaleziony pasujący wzorzec to zostanie zastosowana przypisana do niego scieżka :)

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.