Jak docílím routy článku bez action?
- snazimse
- Člen | 43
Ahoj,
nějak jsem nepochopil styl routování, prosil bych o radu od profíka.
Cílová url by měla vypadat: https://mujweb.cz/…esika-to-vis
Mám presenter Stranka, nepodařilo se mi to jinak než s kl.uvedením
action navíc, což tam nechci…
To znamená třeba:
https://mujweb.cz/…esika-to-vis
Tvar:
$router[] = new Route('<presenter>/<action>/[/<article>]', 'Clanky:view');
Jenže to Nette se chová, že důsledně musím mít
https://mujweb.cz/clanky/ = Presenter Clanky
a Action
https://mujweb.cz/…nejaka-akce/ = Vyzaduje akci pro vykresleni do nejaka-akce.latte
Toto <action> nechci, aby mi to šlo na pevně danou šablonu.
Potřeboval bych to, abych měl presenter a hned volitelný parametr jako
seo-url podle databáze názvu článku
ne žádnou pevnou akci v url, kde musím mít další šablonu u které je
pevně daný název, Nette mě jinak nepustí a vyhodí Err exception…
Z toho co jsem našel jsem nenašel žádné řešení, které by mi fungovalo. Prosím poradí někdo jak to zapsat, jde to přes výchozí router?
Děkuji předem :)
Editoval snazimse (2. 6. 2017 22:55)
- trta911
- Člen | 35
Ahoj, snad poradím.
Toto
$router[] = new Route('<presenter>/<action>/[/<article>]', 'Clanky:view');
nahraď tímto
$router[] = new Route('clanky[/<article>]', 'Stranka:view');
a pak v presenteru StrankaPresenter.php
public function renderView($article)
{
sql select from tabulka where url = $aricle...
}
no a šablona pak v templates/Stranka/view.latte
To by mělo fungovat.
Editoval trta911 (3. 6. 2017 1:05)
- filsedla
- Člen | 101
Identifikace akce určitě není v routě povinná, ale Nette musí vědět,
jakou akci spustit. Řekneš ji právě druhým parametrem
Route
.
Napsal bych to v podstatě stejně jako @trta911. Všimni si, že
v routě se vůbec nemusí vyskystovat <presenter>
nebo
<action>
. Article
je název presenteru a ten má
jednou akci actionDefault($slug)
(akce se ale může jmenovat
jakkoliv).
$router[] = new Route('clanky/<slug>', 'Article:default');