Jak na custom logiku parametru <action> na zaklade ostatnich parametru
- Jan Mikeš
- Člen | 771
Ahoj, chtel bych docilit toho aby se mi v routeru nevyskytoval parametr
<action> a automaticky se zjistoval podle vyplnenych parametru, napr budu
mit vyplneno pouze <productLine> tak bude action=line, budou uvedeny
parametry productLine && productCategory tak action=category, podle
nejake moji custom logiky, nedari se mi toho ale docilit, porad mi to pada
na Invalid link: No route for Product:line(productLine=1)
Pokud uvedu v poli parametru i “action” ⇒ “line” namisto NULL, tak to funguje (samozrejme jen pro action=line, jde mi jen o to, aby router uprednostnil moji custom logiku (a kam ji napsat???) namisto toho aby potreboval explicitne parametr <action>
$router[] = new Route("<productLine>/[<productCategory>[/<product>]]", [
"presenter" => "Product",
"locale" => $lang,
"action" => NULL,
NULL => [
Route::FILTER_IN => function(array $params) {
//
return $params;
},
Route::FILTER_OUT => function(array $params) {
//
return $params;
},
]
]);
- newPOPE
- Člen | 648
@Lexi ale to je mozne dynamicky menit (iba ze by nebolo co sa mi nezda :D). Len to vo FILTER_IN musis vratit aj action (a z defaults action vyhodit) v poli $params lebo na zaklade toho potom Nette zostavuje AppRequest (https://api.nette.org/…ter.php.html#188). Cize to co som ti napisal je len example takisto si tam mozes napisat nejaky if
$router[] = new Route("<productLine>/[<productCategory>[/<product>]]", [
"presenter" => "Product",
"locale" => $lang,
NULL => [
Route::FILTER_IN => function(array $params) {
if(...) {$params['action'] = 'link'}
else {$params['action'] = 'category'}
return $params; // na zaklade $params['action'] si potom Presenter vola akcie...
},
Route::FILTER_OUT => function(array $params) {
// jo a tu musis mat minimalne parametre ktore mas v maske ako povinne inak myslim Nette nevygeneruje link
return $params;
},
]
]);
Editoval newPOPE (29. 9. 2015 14:16)