Vsvětlení fungování routy / redirect
- Jerry
- Člen | 9
Ahoj
S nette sem v úplných začátcích a tak nějak sem se zaseknul při
redirectu. Udělal sem si svůj formulář (Všechno co nejjednodušeji jen
kvůli pochopení jak to funguje).
protected function createComponentMainForm() {
$form = new Form;
$form->addText("name", "jméno");
$form->addSubmit("odeslat");
$form->onSuccess[] = array($this, 'mainFormSucceeded');
return $form;
}
public function mainFormSucceeded() {
$this->redirect("Test:");
}
To je HomepagePresenter. Vytvořil sem si pak ve stejný složce
TestPresenter a v templates složku Test, do ní sem nakopíroval default.late
z Homepage a jen změnil aby něco vypsal.
Problém je že zaboha nemužu přijít na to jak nasměrovat to
přesměrování na tu Test stránku
V RouteFactory mám jako poslední pokus
public static function createRouter() {
$router = new RouteList;
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
$router[] = new Route('<presenter>/<action>[/<id>]', 'Test:default');
return $router;
}
S tím že když přehodím pořadí tak to místo formuláře zobrazí tu Test stránku, ale když se zavolá metoda mainFormSucceeded() tak to vyhodí že stránku nemůže najít.
V dokumentaci sem to tak nějak nepobral, určitě to bude triviální, ale nějak to nemužu pobrat, a případnou pomoc předem dík
- Felix
- Nette Core | 1247
Nejdrive, super ze ses rozhodl pro Nette. :-)
Ohledne routovani, jdes na to trochu blbe, ale to nevadi. Trochu ocituju dokumentaci
Viz: https://doc.nette.org/…tion/routing
// výchozí akcí bude presenter Homepage a akce default
$route = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Uvedená routa je použitelná pro libovolné presentery a akce. Akceptuje cestu např. ve tvaru /article/edit/10 nebo také /catalog/list, protože část s parameterem id je uzavřena do hranatých závorek, čímž říkáme, že je nepovinná.
Tzn, kdyz chces obecnou routu, pro jakykoli presenter a jeho akci, tak pouzijes
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Pokud chces nejakou konkretni, treba pro vypis poslednich clanku, tak napriklad takto
$router[] = new Route('posledni-clanky', 'Article:latests');
// Tuhle tady porad mas, jenom aby fungovali i ostatni, napriklad Home:default (homepage apod)
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
Dulezita vec!
Routy vzdy radime od nejslozitejsi/nejkonkretnejsi po nejobecnejsi. Je to z duvodu toho, ze ktera routa projde jako prvni, tak se pouzije. Takze kdyz das obecnou routu
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
jako prvni, tak vsechny ostatni ti nebudou fungovat.
Snad jsem to obsahl vsechno :-)
Editoval Felix (12. 11. 2015 21:08)
- David Matějka
- Moderator | 6445
tak to vyhodí že stránku nemůže najít.
co to konkretne vyhodi? nejakou chybu od nette, nebo chybu apache?
pokud od nette, tak zkontroluj, jestli mas presenter na spravnem miste (ve slozce app) a jestli ma spravny namespace.
pokud od apache, tak
- zkontroluj, ze mas povoleny mod rewrite
- zkontroluj, zda mas povoleno AllowOverride All