První aplikace – jak rozchodit chybovou hlasku 404 pokud je spatna url adresa
- andros
- Člen | 145
Ahoj,
začínám s Nette a vše si zkouším na první aplikaci podle návodu : https://doc.nette.org/cs/quickstart
Vše krásně funguje, ale když zadám nějakou neexistující url, vyhodí mi
to chybovou stránku error 500.
Poraďte prosím, jak docílím toho, aby při neexistující url adrese vyšla
hláška error 404 ? Díky za nakopnutí správným směrem
- David Matějka
- Moderator | 6445
Koukni se do slozky /log, tam by mela byt ladenka. Ale pri vyvoji by se ladenky mely vyhazovat automaticky. Kde tu aplikaci vyvijis? Jestli na nejakem hostingu, tak si rozhodne rozjed php, apache a mysql lokalne :) pripadne debug mod muzes zapnout pridanim
$configurator->setDebugMode(TRUE);
v bootstrapu hned pod radek new Nette\Configurator
- andros
- Člen | 145
Vyvíjím lokálně, tam se ukáže laděnka, ale na produkci se ukáže chyba 500 a chyba se zaloguje. V logu pak mám:
[2017–01–13 12–54–39] Nette\InvalidArgumentException: Component with name ‚searchMoviesForm‘ does not exist. in /hosting/www/spuntanela.cz/filmy/vendor/nette/component-model/src/ComponentModel/Container.php:170 @ http://filmy.spuntanela.cz/neco @@ exception–2017–01–13–12–54–63bd45b1a0.html
Komponenta searchMoviesForm je v BasePresenteru a ten vypadá takto:
abstract class BasePresenter extends Presenter
{
protected function createComponentSearchMoviesForm()
{
$form = new Form;
$form->addText('movie', 'Název filmu:')
->setRequired('Musíte vyplnit název filmu.');
$form->addSubmit('findMovie', 'Odeslat');
$form->onSuccess[] = [$this, 'searchMoviesFormSucceeded'];
return $form;
}
public function searchMoviesFormSucceeded($form, $values)
{
$this->flashMessage('Vysledek vyhledávání: '. $values->movie);
$this->redirect('Homepage:default',array("find" => $values->movie, "page" => 1));
//$this->redirect('Homepage:');
}
}
- David Matějka
- Moderator | 6445
vypada to, ze pro tu 404 pouzivas stejny layout, ktery chce vykreslit searchMoviesForm, ale error presenter nededi od base presenteru.
- andros
- Člen | 145
To je ono :) Davide , děkuji moc.
Ještě bych se chtěl zeptat ohledně chybové hlášky error 500 v Nette. Stránka error 500 je v templates/Error v souboru 500.phtml (takto to je při instalování čisté aplikace).
Obsah souboru:
<!DOCTYPE html><!-- "' --></script></style></noscript></xmp>
<meta charset="utf-8">
<meta name="robots" content="noindex">
<title>Server Error</title>
<style>
#error-body { background: white; width: 500px; margin: 70px auto; padding: 10px 20px }
#error-body h1 { font: bold 47px/1.5 sans-serif; background: none; color: #333; margin: .6em 0 }
#error-body p { font: 21px/1.5 Georgia,serif; background: none; color: #333; margin: 1.5em 0 }
#error-body small { font-size: 70%; color: gray }
</style>
<div id="error-body">
<h1>Server Error</h1>
<p>We're sorry! The server encountered an internal error and
was unable to complete your request. Please try again later.</p>
<p><small>error 500</small></p>
</div>
Pokud ale dojde k volání chybové stránky 500, tak se načte do hlavní šablony, stejně jak tomu je u chybových hlášek 404.latte a pod. Podle obsahu šablony 500.phtml bych ale čekal, že se stránka načte místo defaultní šablony. Na foru jsem našel ohledně toho několik příspěvků, ale nikde nebylo žádné konečné řešení. Mohl by jsi mi prosím, poradit i v tomhle ?
- David Matějka
- Moderator | 6445
zalezi na tom, kdy to failne. kdyz dojde k chybe treba v presenteru, tak se nacte pouze tato sablona. v tvem pripade se ale jiz zacala vykreslovat ta hlavni sablona a failnulo to az potom. pak nezbyva nic jineho, nez tu 500 sablonu vykreslit tam (slo by to vyresit nejakym output bufferingem a vystup pripadne zahodit v pripade chyby, ale myslim, ze je to zbytecny..)