this->error() konci bielou obrazovkou
- romco
- Člen | 7
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
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
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
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
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
Mě už všechny weby včetně tohoto běží na 8.4 (i s opcache) a žádný problém jsem nezaznamenal.