Routa s viac volitelnymi parametrami
- gondro
- Člen | 7
Urcite to bolo uz riesene ale nic som nenasiel co by mi fungovalo tak ma
prosim hned nepochovajte :)
Ide o toto:
Pouzivam len jeden presenter ten som vypustil z routy aby tam nesvietil:
$router[] = new Route('<action>', 'H');
Obcas predavam aj id usera teda pridal som volitelny parameter id:
$router[] = new Route('<action>[/<id>]', 'S');
Okrem id si predavam aj ine parametry ako napr. type, atp. a tu vznika moj problem ako pridat dalsi parameter. Ak spravim nieco ako toto:
$router[] = new Route('<action>[/<id>][/<type>]', 'S');
Tak to nema ziaden vplyv
Viem ze je to fakt trivialne ale netusim ako to spravit. vedeli by ste mi
poradit
mod_rewrite mam povoleny
php v. 5.4.12
nette v. 2.0.13
- kaylo2122
- Člen | 6
Zatím dle odpovědí ti nikdo neporadil tak aby jsi také pochopil jak to funguje takže ti sem posílám příklady a popisky k tomu jak to funguje a jak to můžeš využít.
Nezapoměn že presenter,module,action jsou víceméně předefinované klíče.
Takže pokud chceš nastavit pevnou routu s povinnými parametry URL tak bude routa vypadat takhle:
$route[] = new Route("<mujKlic>/<mujKlic1>/mujKlic2>/","MujModul:MujPresenter:MojeDefaultniMetodaPresenteru");
Takze ve výsledku aby se ti spustil modul MujModul s presenterem MujPresenter a metodou renderMojeDefaultniMetodaPresenteru(). By jsi musel přistoupit na URL adresu:
**mydomain.tld/hodnota/hodnota1/hodnota2/* následně by ti tyto hodnoty byli přístupné pod klíčema uvedenýma v routeru tzn. „mujKlic“,„mujKlic1“ a „mujKlic2“.
Pokud chceš v url používat parametry pro dynamicke volání presenterů a jejich metod dodáš do routy na začátek <presenter>/<action>/…
V případě že chceš vytvářet nepovinné parametry url obaluješ definici hranatými závorkami [ ].
$route[] = new Route("user/[<type>/][<id>/]","MujModul:MujPresenter:MojeDefaultniMetodaPresenteru"); //všimni si že první parametr nemá žádné závorky, tím omezuji okruh definice na pouze na url v které bude obstahovat domain.tld/user/ což znamená že mi to bude brát v úvahu:
domain.tld/user/moderator/
domain.tld/user/moderator/10/
No a v případě že to chceš vyřešit aby to nebylo závyslé na poslupnosti v url tak by router měl vypadat nějak takto:
$route[] = new Route("user/[<type [A-Za-z]+>/][<id [0-9]+>/]","MujModul:MujPresenter:MojeDefaultniMetodaPresenteru");
Zde si všimni dalších hranatých závorek v definici mezi <> ty určují za jakých podmínek je splněn daný výraz což pro klíč type znamená libovolně dlouhý řetězec složený pouze s písmen velkých či malých, id složený pouze z číslic. Pokud chceš omezit délku řetězce v url můžeš nahradit + za {5} kde 5 reprezentuje délku.
Doufám že jsem ti pomohl a poradil dostatečně na to aby jsi routování porozuměl.