Jak zjistit existenci presenteru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fary
Člen | 155
+
0
-

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
+
0
-

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
+
+1
-

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