Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyjatki i style
Forum PHP.pl > Forum > PHP
q.michal
Czesc,

Chcialem napisac wlasna klase obslugi wyjatkow i zastanawia mnie 1 kwestia. Zalozmy, ze podczas wczytywania strony wystapil nieprzechwycony wyjatek, moj ExceptionHandler go zlapal i wypadalo by w tym miejscu wyswietlic jakas strone z bledem i zakonczyc wykonywanie skryptu. Pytanie rozchodzi sie o ta strone z bledem. Czy wyjatki powinny miec wlasna strone z bledem, na ktorej ew. bylyby jakies informacje do debuggowania, czy moze w tym miejscu powinienem skorzystac z jakiegos systemu templete jak np Smarty i wyswietlic dokladnie taka sama strone jak w przypadku kazdego innego bledu, z tym wyjatkiem, ze bylby to np blad 500 zamiast 404?

Jak byscie podeszli do problemu?
nospor
Problem z OOP nie ma zadnego zwiazku. Przenosze.

ps: miejze litosc, tylko nie smarty... Jak juz bardzo chcesz uzywac jakiegos gotowego systemu szablonow to chociaz uzyj Twig
ps2: czy ja dobrze rozumiem, ze cala strona nie uzywa smarty ale specjalnie dla wyjatkow chcesz dodac smarty? pogielo? wink.gif
Tomplus
Wg mnie, forma i ilość danych powinna zależeć od strony jaką się prowadzi. Bo jeżeli jest to błąd który ma znaczenie z powodów bezpieczeństwa serwisu lub danych użytkowników to wysłanie nagłówka 500 jest na miejscu, jeżeli nie wystarczy komunikat o błędzie, nawet nie musi to być błąd braku strony.

A co do formy. Zrzucając logi, można dodawać do nich krótki HASH, który dalej powinien też być wyświetlony użytkowniku, aby mógł go wysłać do administracji w celu szybkiego z identyfikowania problemu który szczegółowo jest zapisany w logach.

@Nospor
Napisał przykładowo Smarty, chociaż pewnie użyłby w praktyce, gdybyś mu nie powiedział o tym biggrin.gif
q.michal
Zle zrozumiales ;-)

Smarty jest przykladem - moze to byc rownie dobrze Opt czy wspomniany Twig. Takiego systemu template-ow chce uzywac na calej stronie - zarowno dla frontendu, jak i backendu. Chcialem takze zrobic w nim customizowalne strony bledow np dla 404, 403 itp. Pomyslalem, ze fajnie byloby to ujednolicic i w przypadku jakiegos wyjatku - wyswietlic dokladnie taka sama strone ale np z bledem 500. Oznaczaloby to, ze exception handler musialby stworzyc obiekt (np przytoczonego Twiga) i wyswietlic odpowiednia strone z bledem.

Zastanawiam sie czy takie rozwiazanie ma sens i co sadzicie o takim pomysle?
Obecnie do glowy przchodzi mi jedynie problem kiedy styl nie zostanie znaleziony, ale wyobrazam sobie ze taki wyjatek bedzie przechwycony a wykonywanie skryptu zakonczone chociazby za pomoca die().


@Tomplus: tez o tym myslalem. Mam nawet taka metode, ktora generuje i zwraca ID wykonania skryptu. Jest on logowany, moze byc rowniez wyswietlony uzytkownikowi - zarowno przy wyjatku jak i kazdym innym bledzie - w koncu wystapienie bledu 404 tez nie zawsze musi byc oczywiste wink.gif

  1. public static function getExecId() {
  2. static $execid;
  3. if(!isset($execid)) {
  4. $time = System::getMiroTime();
  5. $execid = sprintf("%07x%s", ($time - floor($time)) * 1000000, substr(sha1(mt_rand()), 0, 6));
  6. }
  7. return $execid;
  8. }

Pyton_000
Ładne strony błędów są w modzie smile.gif O ile 404 powinno być maksymalnie szybkie jak to tylko możliwe o tyle pozostałe można olać. Choć inne kody niczym w sumie nie będą się różniły od 404 poza kodem.

Równie dobrze możesz zrobić statyczne pliki html z prostą zawartością smile.gif
q.michal
No wlasnie chodzi o to, ze chcialbym tam dodatkowo wyswietlic jakis backtrace itp (ale zeby nie bylo, tylko kiedy bedzie wlaczone debuggowanie).
Z tego wzgledu nie chcialbym dawac statycznych stron. Z drugiej strony chcialbym dac mozliwosc zmiany wygladu tych stron.
Pyton_000
No to możesz zaaplikować np: https://filp.github.io/whoops/
q.michal
Wiem, znam ;-)
Whoops ma wlasne style, czyli cos przeciwnego do tego co chcialbym osiagnac.
Prawde mowiac nie widzialem nigdzie aby wyjatki korzystaly ze styli, wiec chcialem 'skonsultowac' taka mozliwosc - czy nie niesie za soba jakis przykrych kosenwecji, ktorych nie jestem swiadom.
Chyba ze rozwiazalibyscie to w inny sposob.
Pyton_000
Whoops w PrettyPageHandler ma metodę `addResourcePath()` w której możesz podać własne ścieżki do szablonów.
Dzięki temu możesz wygląd dostosować do swoich potrzeb.

Przeanalizuj sobie tą metodę:
https://github.com/filp/whoops/blob/master/...andler.php#L150
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.