Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Exception w bootstrapperze
Forum PHP.pl > Forum > PHP > Frameworki
matias
Na podstawie przedstawionego na stronie przykładu w bootstraperze umieściłem następujący kod

  1. <?php
  2. $front->throwExceptions(true);
  3. try {
  4. $front->dispatch();
  5. } catch (Exception $e) {
  6. // sam obsłuż wyjątki
  7. }
  8. ?>

wystarczy jeszcze dodać

  1. <?php
  2. echo $e->getMessage();
  3. ?>

i już wyświetlamy błąd ew. możemy go jakoś obsłużyć.

Pytanie moje brzmi jak z bootstrapera przekierować to do konkretnego kontrolera, który będzie odpowiedzialny za ew. przedstawianie tych błędów w bardziej ludzki sposób smile.gif
yankes
zobacz: helper kontrolera: $this->_forward

http://framework.zend.com/manual/en/zend.c...ionhelpers.html
Sabistik
Nic mi nie przychodzi do głowy poza użyciem Zend_Controller_Action_Helper_Redirector()
matias
Wielkie dzięki za podpowiedź

Zrobiłem tak i działa, a pomysł zaczerpnąłem z http://wiktorski.us/2008/02/15/formularze-wielostronicowe/

  1. <?php
  2. try 
  3. {
  4. $frontController->dispatch();
  5. } 
  6. catch (Exception $error) 
  7. {
  8. $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
  9. $redirector->gotoUrl('error');
  10. }
  11. ?>

Ponieważ jestem nowicjuszem we frameworkach proszę jeszcze o podpowiedź jak w domyślnej akcji kontrolera "error" wyciągnąć błąd z Exception?

Pytanie jeszcze czy z Exception można wyciągnąć jakiś kod błędu a nie tylko komunikat poprzez $error->getMessage(); ?
Sabistik
Sposób w jaki to kombinujesz nie ma sensu smile.gif Zainteresuj się lepiej pluginem Zend_Controller_Plugin_ErrorHandler
Martio
Dokładnie tak! Należy użyć domyślnie włączonego pluginu ErrorHandler, a wyjątki będą przechwycane we frontowym kontrolerze i obsługiwane w kontrolerze ErrorController lub inny wskazanym przez użytkownika. W zamyślnie developerów ZF nie mają prawa wystąpić inne wyjątki, które będą obsługiwane w bootstrapie. W praktyce warto jednak inicjalizację frontowego kontrolera wrzucić do bloku try - catch, by przechwycić wyjątki zgłoszone przez inicjalizowane obiekty w bootstrapie jak logger czy db.
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.