我試着用這裏描述http://www.symfony-project.org/cookbook/1_2/en/error_templates但似乎這個變量沒有symfony的1.4定義的,至少它不包含傳遞給例外這樣throw new sfException('some message')
symfony 1.4:如何將異常消息傳遞給error.html.php?
你知道其他的方式來傳遞這個消息特殊變量$message
消息給error.html.php?
我試着用這裏描述http://www.symfony-project.org/cookbook/1_2/en/error_templates但似乎這個變量沒有symfony的1.4定義的,至少它不包含傳遞給例外這樣throw new sfException('some message')
symfony 1.4:如何將異常消息傳遞給error.html.php?
你知道其他的方式來傳遞這個消息特殊變量$message
消息給error.html.php?
你需要做一些自定義的錯誤處理。我們自己實施了自定義symfony操作。請謹慎行事,這種行爲本身也可能引發異常,您需要考慮這一點。
以下可能是一個好的開始。首先添加一個監聽事件,一個好地方是ProjectConfiguration.class.php:
$this->dispatcher->connect('application.throw_exception', array('MyClass', 'handleException'));
使用事件處理程序可能足以滿足您想用異常做什麼,例如,如果你只是想郵寄一個堆棧跟蹤到管理員。我們希望轉發自定義操作來顯示和處理反饋表單。我們的事件處理程序看起來是這樣的:
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);
}
}
您可以將模塊和行動立即配置到settings.yml中
all:
.actions:
error_500_module: error
error_500_action: error500
轉發到異常在行動本身,你現在可以做任何你想要例外,例如。顯示反饋表單以聯繫管理員。你可以通過使用$ request-> getParameter('exception')來獲得異常本身
我發現了另一個技巧 - sfContext
可以用來將異常消息傳遞給error.html.php
,但是必須使用自定義函數拋出異常。例如:
class myToolkit {
public static function throwException($message)
{
sfContext::getInstance()->set('error_msg', $message);
throw new sfException($message);
}
比使用throw new sfException('some message')
的insted的,你應該使用myToolkit::throwException('some message')
要error.html.php
使用<?php echo sfContext::getInstance()->get('error_msg') ?>
顯示的消息,我想我找到了一個更簡單的答案。 Symfony 1.4 $message
確實沒有定義,但是$exception
是(它包含異常對象)。
所以只是回聲$exception->message
。
等voilà!
+1非常感謝!我們的系統支持主題化,如果沒有這個功能,我們也不會支持錯誤500頁的主題。非常感激。 – flu
感謝您的回答!將自定義函數連接到'application.throw_exception' *是否覆蓋* symfony在該事件上的默認行爲?如果是的話,我可以通過在自定義函數中調用'self :: parent()'來防止它嗎?我只是想*添加*一些功能.. – Tapper
@Tapper你應該能夠通過修改返回值來實現,試試$ event-> setReturnValue(false) – Gerry