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
Contactexistuje 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 :-)