Jak zjistit existenci presenteru
- fary
- Člen | 155
Potřeboval bych poradit, jakým způsobem lze zjistit existenci určitého presenteru. Např, pokud mám:
$url = $this->getHttpRequest()->getUrl();
dump($url);
tak zístkám např:
Nette\Http\UrlScript #7c48
scriptPath private => "/"
scheme private => "http" (4)
user private => ""
pass private => ""
host private => "mysite" (5)
port private => 80
path private => "/contact" (8)
query private => ""
fragment private => ""
Potřeboval bych podle $url->path
, což je
/contact
nejprve zjistit, zda presenter
Contact
existuje a teprve pak se na něj přesměřovat. Pokud by
neexistoval, přesměřoval bych na jiný, nějaký defaultní presenter. Lze
to nějak?
- David Matějka
- Moderator | 6445
Slozite a ani ti tohle reseni moc nedoporucuju :)
Pokud znas jmeno presenter, muzes si injectnout Nette\Application\IPresenterFactory
a pokusit se vytvorit presenter a pritom chytat Nette\Application\InvalidPresenterException
takze
try {
$presenterFactory->createPresenter("Contact");
} catch(InvalidPresenterException $e) {
//neexisutuje
}
Pokud presenter neznas a znas jen url, muzes si na routeru (kterej si injectnes) nechat matchnout http request a router ti vrati aplikacni request, ze ktereho si uz nazev presenteru vytahnes :)
- Jan Endel
- Člen | 1016
Nette se defaultně chová tak, že pokud nic nenaroutuje, tak se spustí akce Error:default a Error Presenter si můžeš upravit k obrazu svému, že pokud je chyba BadRequestException a code je 404 tak přesměruj na tvůj výchozí a nemusíš vymýšlet kejkle s presenter factory :-)