První aplikace – jak rozchodit chybovou hlasku 404 pokud je spatna url adresa

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

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

ahoj, jedna se o chybu 500 od nette nebo od apache?

andros
Člen | 145
+
0
-

vyhodí to chybu 500 nette, takovou jaká je definovaná v templates/Error/500.phtml

David Matějka
Moderator | 6445
+
0
-

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

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

vypada to, ze pro tu 404 pouzivas stejny layout, ktery chce vykreslit searchMoviesForm, ale error presenter nededi od base presenteru.

andros
Člen | 145
+
0
-

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

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

andros
Člen | 145
+
0
-

Díky moc za vysvětlení.