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 Ç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
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
@Tapper, bunun yerine dönüş değerini değiştirerek, $ event-> setReturnValue (false) yerine deneyin. – Gerry