Zvláštní dotaz k routám a uživatelům
- Jack06
- Člen | 168
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
$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
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
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)
- Jack06
- Člen | 168
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
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)