Vytvareni linku – nehledat presenter
- KingKoca
- Člen | 25
Ahoj,
potrebuju poradit s vytvarenim odkazu. Mam takovouto routu:
<?php
$router[] = new \Nette\Application\Routers\Route('[<lang [a-z]{2}>/]<path .*>',array(
'presenter'=>'Front',
'action'=>'Default',
));
?>
Je tedy jasne, ze se jedna vzdy o FrontPresenter, ve kterem se uz url adresa
zpracuje (parametr <path>) a timto smerem je to OK. Ale kdyz chci vytvorit
odkaz pres {link}, potrebuju neco takoveho:
{link 'strankaX', 'param' => 'hodnota'}
nehledal actionStrankaX,
ale vytvoril odkaz v podobe:
$basePath.'/strankaX?param=hodnota'
– zkratka aby nehledal
presenter / action, ale aby proste vzal to, co mu tam vrazim.
Lze to nejak jednoduse udelat? Diky
- Michal Vyšinský
- Člen | 608
Ahoj,
musíš to udělat takto:
{link Front:strankaX, param => "hodnota"}
Nette nemůže při vytváření odkazu vědět, že chceš jít zrovna na ten konkrétní presenter. Když nezadáš název presenteru, tak Nette jako presenter pro odkaz bere právě aktuální presenter.
Editoval CherryBoss (23. 11. 2012 9:21)
- KingKoca
- Člen | 25
Jo to je spravne, on tam je jen jeden presenter a na ten to ma jit.
Problem je v tom, ze to neumi zkonstruovat URL:
volam: {link test/potomek/strankaX, 'param' => 'hodnota'}
a ono to
pise: error: No route for Front:test/potomek/strankaX(param=hodnota, lang=1)
Potrebuju aby to vygenerovalo url
test/potomek/strankaX?param=hodnota
protoze diky tomu routeru to
opet zpracuje FrontPresenter, coz je spravne.
Moje otazka zni: mam na to vytvorit nejaky specialni router (vlastni) nebo staci filter funkce, popr. jake?
Edit: prisel jsem na toto:
krome jiz definovaneho routeru (viz prvni post) jsem vytvoril dalsi:
<?php
$router[] = new \Nette\Application\Routers\Route('[<lang [a-z]{2}>/][<action .*>]',array(
'presenter'=>'Front',
'action'=>array(
\Nette\Application\Routers\Route::FILTER_OUT => function($arg){ return $arg;}
)
));
?>
a kdyz volam metodu link (at uz z presenteru nebo z latte makra), tak to generovani prebira tento router a ten generuje url adresy takove, jake chci. Akorat v url nesmim mit dvojtecku.
Editoval KingKoca (23. 11. 2012 10:30)
- jiri.pudil
- Nette Blogger | 1029
Pokud má „test/potomek/strankaX“ odpovídat parametru path v routě, pak by to asi chtělo
{link default path => "test/potomek/strankaX", param => "hodnota"}
- ViPEr*CZ*
- Člen | 817
Hmmm to určitě nebude dobře…například takové action se u komponenty
formuláře vygeneruje špatně. Zkoušel jsem to na odkazu například
/cz/kontakt a do action mi to vygeneruje
/default?do=contactForm-submit což je špatně a já bych předpokládal
/cz/kontakt?do=contactForm-submit
Taky by mě to docela zajímalo jestli toto lze nějak do routy zadat nebo jak
řešit to, že předem nevím jak se jmenuje presenter ani akce a ani další
parametry co pak následují?
- mildabre
- Člen | 62
CherryBoss napsal(a):
Ahoj,
musíš to udělat takto:{link Front:strankaX, param => "hodnota"}
Nette nemůže při vytváření odkazu vědět, že chceš jít zrovna na ten konkrétní presenter. Když nezadáš název presenteru, tak Nette jako presenter pro odkaz bere právě aktuální presenter.
Když se podívám na tu routu co tam má:
$router[] = new Route('[<lang [a-z]{2}>/][<action .*>]',...};
tak je vidět, že tam někde musí mít ten lang, takže já bych zkusil třebas:
{link Front:strankaX, lang, param => "hodnota"}
Vyzkoušej to takhle a dej zprávu jak to dopadlo.
Editoval mildabre (8. 12. 2012 17:24)