2012-06-28 23 views
5

Engellenebilen üyelerim var ve üye engellendiğinde bunları özel bir hata sayfasına göndermek istiyorum, bunu zend çerçevesinde nasıl yapabilirim? Ben Özel hata sayfaları Zend Framework'e nasıl gönderilir?

throw new Zend_Controller_Dispatcher_Exception('Your message here'); 

denedik ama "Mesajınızı buraya" demiyor, bu böyle yaptığımda "sayfa bulunamadı" diyor.

Burada hata denetleyicim var. İşte

<?php 

class ErrorController extends Zend_Controller_Action 
{ 

public function errorAction() 
{ 
    $errors = $this->_getParam('error_handler'); 

    switch ($errors->type) { 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 

      // 404 error -- controller or action not found 
      $this->getResponse()->setHttpResponseCode(404); 
      $this->view->message = 'Page not found'; 
      break; 

      // 666 error -- controller or action not found 
      $this->getResponse()->setHttpResponseCode(666); 
      $this->view->message = 'Blocked'; 
      break; 
     default: 
      // application error 
      $this->getResponse()->setHttpResponseCode(500); 
      $this->view->message = 'Application error'; 
      break; 
    } 

    // Log exception, if logger available 
    if ($log = $this->getLog()) { 
     $log->crit($this->view->message, $errors->exception); 
    } 

    // conditionally display exceptions 
    if ($this->getInvokeArg('displayExceptions') == true) { 
     $this->view->exception = $errors->exception; 
    } 

    $this->view->request = $errors->request; 
} 

public function getLog() 
{ 
    $bootstrap = $this->getInvokeArg('bootstrap'); 
    if (!$bootstrap->hasPluginResource('Log')) { 
     return false; 
    } 
    $log = $bootstrap->getResource('Log'); 
    return $log; 
} 

} 

dokümantasyon olduğunu http://framework.zend.com/manual/en/zend.exception.using.html ben bunu anlamıyorum :(

cevap

8

İşte bunu yapmak için birkaç öneri sunuyoruz.

Öncelikle hatalarınızı standart no_route/no_controller/no_action hatalarından ayırt etmeniz gerekir. . Bunu yapmak için, kendi özel istisna atabilir (PHP'nin Exception sınıftan bu uzatabilirsiniz

throw new My_Exception_Blocked('You are blocked'); 

Sonra, bu gibi görünmek için hata denetleyicisi değiştirin:

public function errorAction() 
{ 
    $errors = $this->_getParam('error_handler'); 

    switch ($errors->type) { 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER: 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION: 

      // 404 error -- controller or action not found 
      $this->getResponse()->setHttpResponseCode(404); 
      $this->view->message = 'Page not found'; 
      break; 

     // check for any other exception 
     case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER: 
      if ($errors->exception instanceof My_Exception_Blocked) { 
       $this->getResponse()->setHttpResponseCode(403); 
       $this->view->message = $errors->exception->getMessage(); 
       break; 
      } 
      // fall through if not of type My_Exception_Blocked 

     default: 
      // application error 
      $this->getResponse()->setHttpResponseCode(500); 
      $this->view->message = 'Application error'; 
      break; 
    } 
} 

Ben de değiştiHTTP hata kodları olmadığı için 666 için 403 yanıt kodu ve bu durum sunucu ve/veya istemciyi bozabilir

Yardım edin.

+0

Cevabınız için teşekkür ederiz! Cemal'ın bu hata işleyicisiyle bir hata mesajı alması gibi engelli üyeler gibi sorunların ele alınması konusundaki cevabı hakkında ne düşünüyorsunuz? Kullanmalı mıyım yoksa başka bir kontrol cihazı kullanarak mı çalışmalıyım? – Darius

+0

Bir istisnayı atmak ve hata denetleyicisinin ele almasını sağlamak için bir eylem yardımcı veya statik yöntemini çağırmak kadar kolay olur. Varsayılan ErrorHandler eklentisi, yalnızca 404 hatası gibi belirli istisnaları yakalamak için tasarlanırken, bunu çok fazla karmaşıklaştırmamak anlamlıdır. Diğer koşulların üstesinden gelmek için hata denetleyicilere küçük değişiklikler yaptım, bu yüzden gereksinimlerinize uygun olup olmadığını tahmin ediyorum, ya da el ile yönergeleri izleyin ve sadece bunu yapacak bir yardımcı aracı uygulayın. – drew010

5

Sen programatic hataları yönetmek için hata denetleyici eklenti kullanmak gerekir. Ben nerede olacak sadece kontrolöre kullanıcıyı yönlendirmek öneririm gerekli mesajı görmek. Zend Framework hata denetleyici uygulaması gereksiz yere karmaşık. Sen yönlendirerek sorunu kolayca çözebilir.

programatic hatalar için hata kontrolörü de önerilmez kullanma. belgelerinden Ayrıntılar feryat olduğunu.

Zend_Controller_Plugin_ErrorHandler, eksik denetleyiciler veya eylemlerden kaynaklanan da dahil olmak üzere, uygulamanız tarafından atılan işleme özel durumlar için bir drop-in eklentisi sağlar; MVC Özel Durumlar bölümünde listelenen yöntemlere alternatifidir.

eklentinin birincil hedefleri

şunlardır: hayır rota nedeniyle kaldırdı eksik kontrolörleri ya da eylem yöntemleri

  • Intercept istisnalar yükseltilmiş

  • Önleme istisnalar eşleşti zaman

    • Önleme istisnalar kaldırdı eylem denetleyicileri içinde

    Başka bir deyişle, ErrorHandler eklentisi HTTP 404 tipi hataları (sayfa eksik) ve 500 tür hatalar (iç hata) işlemek için tasarlanmıştır. Diğer eklentilerdeki istisnaları yakalamak amaçlanmamıştır.

  • +0

    Bahşiş için teşekkürler! Bunu programımda ve programımda buna göre düşüneceğim. – Darius

    İlgili konular