Zvláštní dotaz k routám a uživatelům

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jack06
Člen | 168
+
0
-

Dobrý den, chci se zeptat, zda se dá dosáhnout takovýchto adres pomocí rout, když mé základní routy vypadají takto a vytváří mi adresy (http://example.com/action/), pokud je shodný presenter s používaným:

<?php
        $router[] = new Route('logout', array(
         'presenter' => 'User',
         'action' => 'logout',
        ));

        $router[] = new Route('[<presenter>/]<action>/<id>', array(
         'module' => 'Front',
         'presenter' => 'Homepage',
         'action' => 'default',
         'id' => null,
        ));
?>

Routa, kterou bych si představoval by teoreticky vypadala podobně jako u Frontu:

<?php
        $router[] = new Route('[<user_id>/]<action>/<id>', array(
         'module' => 'User',
	 'user_id' => null,
         'presenter' => 'MyProfile',
         'action' => 'default',
         'id' => null,
        ));
?>

nevím, jak to napsat, ale chtěl bych, aby mi to vytvořilo defaultně adresu http://example.com/…photoGallery (buď moje id, nebo pokud bych klikl na něčí profil, tak jeho)

Jan Tvrdík
Nette guru | 2595
+
0
-
$router[] = new Route('logout', array(
 'presenter' => 'User',
 'action' => 'logout',
));

$router[] = new Route('<user_id [0-9]+>/<action>/<id>', array(
 'module' => 'User',
 'presenter' => 'MyProfile',
 'action' => 'default',
 'id' => null,
));

$router[] = new Route('[<presenter>/]<action>/<id>', array(
 'module' => 'Front',
 'presenter' => 'Homepage',
 'action' => 'default',
 'id' => null,
));
Jack06
Člen | 168
+
0
-

Jan Tvrdík napsal(a):

$router[] = new Route('logout', array(
 'presenter' => 'User',
 'action' => 'logout',
));

$router[] = new Route('<user_id [0-9]+>/<action>/<id>', array(
 'module' => 'User',
 'presenter' => 'MyProfile',
 'action' => 'default',
 'id' => null,
));

$router[] = new Route('[<presenter>/]<action>/<id>', array(
 'module' => 'Front',
 'presenter' => 'Homepage',
 'action' => 'default',
 'id' => null,
));

Tak to jsem zkoušel, ale píše mi to „No route for User:MyProfile:default()“, takže nevím jak psát linky…

do template vložím všechny údaje o uživateli:

<?php
 $this->template->user = $this->user->isLoggedIn() ? $this->user->getIdentity() : NULL;
?>

jak tedy pak tvořit redirect v presenteru, tak aby to bralo tu routu a jak napsat link:

<a href="{link :User:MyProfile:default}">{$user->name} {$user->surname}</a>

aby mi fungoval jak má? zkoušel jsem do toho linku nějak vložit to id uživatele ale jaksi mi to hlásilo chyby typu nepovolený znak : atd

Díky tedy ještě jedou za radu

Editoval Jack06 (30. 8. 2010 10:25)

Jack06
Člen | 168
+
0
-

Ještě jsem to zkoušel takto, ale bohužel taky mi to nedělá co by mělo.. neodkáže mě to na tu defaultní action a využívá to routu pro front:

<a href="{link default, 'user_id' => $user->id, 'action' => 'addPhoto'}">{$user->name} {$user->surname}</a>
Jack06
Člen | 168
+
0
-

Tak jsem zkusil toto a už to jakž takž funguje:

$router[] = new Route('<user_id [0-9]+>/<action>/<id>', array(
 'module' => 'User',
 'presenter' => 'MyProfile',
 'id' => null,
));

$router[] = new Route('<presenter>/<action>/<id>', array(
 'module' => 'Front',
 'presenter' => 'Homepage',
 'action' => 'default',
 'id' => null,
));

ale bohužel, když do šablony napíšu toto:

<a href="{link :User:MyProfile:, 'user_id' => $user->id, 'action' => 'addPhoto'}">{$user->name} {$user->surname}</a>

tak mi to místo tohoto:

http://example.com/1/addphoto/

generuje odkaz:

http://example.com/1/default/

Takže mi to nebere v potaz to, co chci vložit do action a nevím proč tomu tak je. Opět předem díky za rady

Editoval Jack06 (31. 8. 2010 11:49)

bazo
Člen | 620
+
0
-

no lebo sa to robi takto
{link :User:MyProfile:addPhoto, ‚user_id‘ ⇒ $user->id}

Jack06
Člen | 168
+
0
-

Achjo, když se nedaří tak se nedaří.. když už fungují routy, tak nefungují widgety nebo prostě nedělají co by měly..

template: http://codepad.org/wMhNvUgf (<? je na začátku jen aby to nebyl plain text a byly vidět proměnné)

presenter: http://codepad.org/lx9rHYfy

error: http://www.2i.cz/36abd0fa29

fakt nechápu už co s tím.. jestli je někde potřeba předávat to user_id :-((

Editoval Jack06 (30. 8. 2010 12:59)

Jack06
Člen | 168
+
0
-

Tak jsem to asi vyřešil… Přehodil jsem pořadí rout.. první pro Front a druhou pro User a jede to :-)

//Edit: tak ne no není to vyřešeno.. při odesílání formuláře to opět nebere v potaz user_id, které je v url a laděnka hodí chybku a bere v potaz routu pro Front místo User (opět důsledek nepředaného user_id): http://www.2i.cz/4799f2d80b

Jak se tomu dá vyhnout, nebo jestli a jak stačí vložit to user_id nějako do toho formuláře..? Díky

Editoval Jack06 (31. 8. 2010 12:05)