Ako na adresu v tvare presenter/action/id-title
- Čamo
- Člen | 798
Pozdravujem všetkých ľudí ochotných toto čítať a prejdem k veci.
Chcem vytvoriť adresu v tvare
presenter/action/id-title resp. pres/act/id/title
V šablone kde generujem odkazy mám toto:
<a href="{link Post:show $post->id}">{$post->title}</a>
Nedokážem k tomu $post->id dostať $post-title.
Ja lama som si to predstavoval takto:
<a href="{link Post:show $post->id-$post->title}">{$post->title}</a>
Z toho Nette vygenerovalo pres/act/id
(bez title).
Aby to celé fungovalo, tak som zlamil ešte aj nejaký filter do routy, ktorá to má podľa mňa celé obsluhovať. Ten vyzerá takto:
$router = new RouteList();
$router[] = new Route('<presenter>/<action>/<postId>',
array('presenter' => 'Post',
'postId' => array(
Route::FILTER_IN => function($postId)
{
return explode('-', $postId)[0];
},
Route::FILTER_OUT => function($postId)
{
return Strings::webalize($postId, NULL, FALSE);
}
))
);
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Môže mi prosím vás niekto poradiť čo s tým mám robiť?
Editoval Čamo (4. 6. 2014 14:42)
- Čamo
- Člen | 798
Tak som medzitým na niečo prišiel.
Odkazy teraz generujem takto:
{capture $urlId}{$post->id}-{$post->title}{/capture}
<a href="{link Post:show $urlId}">{$post->title}</a>
a tu routu som zmenil takto:
$router[] = new Route('<presenter>[/<action>]/<postId>',
array('presenter' => 'Post',
'action' => 'show',
'postId' => array(
Route::FILTER_IN => function($postId)
{
return $postId;
},
Route::FILTER_OUT => function($postId)
{
return Strings::webalize($postId, NULL, FALSE);
}
))
);
Len neviem či to robím dobre.
PS: Zaujímavé je, že keď zavolám
$this->database->table(‚posts‘)->get($id) ← $id === id-title
tak mi to normálne funguje(zoberie písmená miesto integeru).
- Tabetha
- Člen | 140
A niečo taktéto ti nebude fungovať?
<a href="{link Post:show postId => $post->id, title => $post->title}">{$post->title}</a>
a router nejako takto
$router[] = new Route('<presenter>[/<action>]/<postId>/<title>',
array('presenter' => 'Post',
'action' => 'show',
'title' => array(
Route::FILTER_IN => function($title)
{
return $title;
},
Route::FILTER_OUT => function($title)
{
return Strings::webalize($title, NULL, FALSE);
}
))
);