this->error() konci bielou obrazovkou

romco
Člen | 7
+
0
-

Ahojte , stiahol som si aktualnu web-projekt. Rozbehne sa mi , spustam ho v z localhost takze som v debug mode.
Narazil som ale na problem s $this->error.

Nizsie uvedeny presenter mi vypise Hello World. Aplikacie sa spustu v debug mode a vsetko ide ako ma. Aplikcia je teda funkcna a spravna nakonfigurovana.

final class HomePresenter extends Nette\Application\UI\Presenter
{
  public function renderDefault(): void
  {
//    $this->error('Chyba');
//    throw new Nette\Application\BadRequestException('TEST', IResponse::S404_NotFound);
    $this->template->message = 'Hello world!';
  }
}

Chcel som ostovat generovanie error a tak som skusil prevolat $this->error(‚Chyba‘). Tento prikaz v debug mode sposobi ze mi aplikacia zatuhne, nezobrazi sa ani tracy. Ostane biela obrazovka. Skusal som pre-mazat cache. Nic nepomohlo.
Jedine co pomohlo bolo v config.neon nastavit catchExceptions: true vtedy aplikacia nezatuhla ale vyskocil Page not found presenter 404, taky ako sa zobrazuje v produkcii. To som ale nechcel.

final class HomePresenter extends Nette\Application\UI\Presenter
{
  public function renderDefault(): void
  {
    $this->error('Chyba');
//    throw new Nette\Application\BadRequestException('TEST', IResponse::S404_NotFound);
    $this->template->message = 'Hello world!';
  }
}

implementacia $this->error() vyzera nasledovne

	/**
	 * Throws HTTP error.
	 * @throws Nette\Application\BadRequestException
	 */
	public function error(string $message = '', int $httpCode = Nette\Http\IResponse::S404_NotFound): void
	{
		throw new Nette\Application\BadRequestException($message, $httpCode);
	}
}

Preto som skusil miesto volania $this->error() rovno generovat vynimku ako to robi samotne metoda $this->error()

final class HomePresenter extends Nette\Application\UI\Presenter
{
  public function renderDefault(): void
  {
//    $this->error('Chyba');
    // miesto volania $this->error('Chyba') rovno generujem vynimku a vtedy je vsetko ok
    throw new Nette\Application\BadRequestException('Chyba', IResponse::S404_NotFound);
    $this->template->message = 'Hello world!';
  }
}

Ked som generoval priamo vymimku z mojho presentera tak sa mi zobrazil tracy error presenter. Co bol ocakavany stav a to som chcel dosiahnut.

Zaver je taky ze

  • ked generujem z mojho presentera vynimku BadRequestException aplikacia sa v debug mode zachova spravne a zobrazi sa tracy error presenter.
  • ked je generovana ta ista vynimka cez metodu $this->error() , aplikacia v debug mode zatuhne, nezostavi sa tracy a ostane biela obrazovka

Chcel by som pouzivat $this->error() ake vzdy ked mi ma skocit tracy error presenter mi aplikacia zatuhne a ostane biela. Takze neviem co sa stalo. Viete mi prosim povedat co robim zle ?

Editoval romco (12. 1. 20:50)

Marek Bartoš
Nette Blogger | 1280
+
0
-

To je dost zvláštní. Vyhození BadRequestException a zavolání $this->error() dělá totéž (pokud sis metodu nepřetížil).

Máš poslední patch PHP? (Např. 7.4.33 místo 7.4.0) Jinak nevysvětlitelné problémy aktualizace PHP může vyřešit. PHP mívá občas chyby v paměti a to se pak náhodné věci nechovají správně.

Editoval Marek Bartoš (13. 1. 1:02)

Infanticide0
Člen | 109
+
0
-

Možná sis Tracy error jenom skryl, koukni, jestli neni nahoře vpravo tlačítko, taky můžeš zobrazit/skrýt Tracy klávesou Esc. Vlastní CSS ti může Tracy taky rozbít, ale to asi v čistym web-projectu ten problém nebude.

romco
Člen | 7
+
0
-

Marek Bartoš napsal(a):

To je dost zvláštní. Vyhození BadRequestException a zavolání $this->error() dělá totéž (pokud sis metodu nepřetížil).

Máš poslední patch PHP? (Např. 7.4.33 místo 7.4.0) Jinak nevysvětlitelné problémy aktualizace PHP může vyřešit. PHP mívá občas chyby v paměti a to se pak náhodné věci nechovají správně.

Mam php 8.4.2.
Skusil som a prepol sa na 8.3.15 a na 8.2.27 a pri tych mi to slo korektne.
Pri prepinani spat na 8.4.2 mi vyskocili conflict warningy php modulu v apache.
Takze problem bude niekde u mna v konfiguracii php verzie 8.4.x.
Takze idem si najst chyby. Diky za usmernenie.

Marek Bartoš
Nette Blogger | 1280
+
+1
-

Nejspíš to nebude konfigurací, ale bugem v PHP verzi. Prvních pár patchů po vydání má často takové problémy.

David Grudl
Nette Core | 8239
+
+1
-

Mě už všechny weby včetně tohoto běží na 8.4 (i s opcache) a žádný problém jsem nezaznamenal.

romco
Člen | 7
+
0
-

Bol to problem u mna v konfiguracii 8.4 ky. Lebo som skusal aj kontajner s 8.4 a tam som problem nemal. Problem bol ze som mal domiesane nastavenia apache. Davnejsie som potreboval mod PHP-FPM, som tam nieco pocaroval a zrejme som to nevratil do povodneho stavu :( Diky za rady.