2011-08-16 16 views

cevap

7

Bazı özel hata işlemlerini gerçekleştirmeniz gerekir. Kendimize özel bir simetri eylemine yöneldik. Yine de dikkatli olun, bu eylemin kendisi de bir istisna tetikleyebilir, bunu hesaba katmanız gerekir.

Aşağıdakiler iyi bir başlangıç ​​olabilir. Eğer istisna ile ne yapmak istediğinizi için yeterli olabilir olay işleyicisi kullanarak

$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException')); 

, örneğin sadece posta istiyorsanız: Önce olayı için bir dinleyici ekleyin iyi bir yer ProjectConfiguration.class.php olurdu yöneticiye bir yığın izi. Bir geri bildirim formu görüntülemek ve işlemek için özel bir eyleme iletmek istedik. Bizim olay işleyicisi böyle bir şey görünüyordu:

class MyClass { 
    public static function handleException(sfEvent $event) { 
    $moduleName = sfConfig::get('sf_error_500_module', 'error'); 
    $actionName = sfConfig::get('sf_error_500_action', 'error500'); 
    sfContext::getInstance()->getRequest()->addRequestParameters(array('exception' => $event->getSubject())); 
    $event->setReturnValue(true); 
    sfContext::getInstance()->getController()->forward($moduleName, $actionName); 
    } 
} 

Artık şimdi yapabilirsiniz eylem kendisi de settings.yml

all: 
    .actions: 
    error_500_module:  error 
    error_500_action:  error500 

bir istisna üzerinde iletmek üzere modülü ve eylem yapılandırabilir her ne istisna ile isteyin, örn. yöneticiyle iletişime geçmek için geri bildirim formunu görüntüleyin. Özel isteğini $ request-> getParameter ('exception') kullanarak edinebilirsiniz

+1

+1 Çok teşekkür ederim! Sistemimiz temaları destekliyor ve bu olmadan 500 sayfalık hataların da desteklenmesini sağlayamıyorduk. Çok takdir edildi. – flu

+0

Cevabınız için teşekkürler! Özel işlevinizi 'application.throw_exception' * ile ilişkilendirmek, bu olaydaki * symfony'nin varsayılan davranışının üzerine yazıyor mu? Eğer evet ise, 'self :: parent()' işlevini özel işlev içinde çağırmaktan engelleyebilir miyim? Ben sadece eklemek istiyorum * ekle * bazı fonksiyonlar .. – Tapper

+1

@Tapper, bunun yerine dönüş değerini değiştirerek, $ event-> setReturnValue (false) yerine deneyin. – Gerry

0

Bunu yapmak için başka bir numara buldum - sfContext istisna mesajını error.html.php'a geçirmek için kullanılabilir, ancak özel işlev istisna atmak. Örneğin: throw new sfException('some message') kullanarak Insted daha

class myToolkit { 
    public static function throwException($message) 
    { 
     sfContext::getInstance()->set('error_msg', $message); 
     throw new sfException($message); 
    } 

Eğer ben daha basit bir cevap buldum error.html.php kullanım <?php echo sfContext::getInstance()->get('error_msg') ?>

1

mesajı görüntülemek için myToolkit::throwException('some message')

kullanmalıdır. Symfony 1.4 üzerinde $message gerçekten tanımlı değil, ancak $exception olduğunu (özel durum nesnesini içerir).

Sadece echo $exception->message.

Et voilà!