symfony 1.4: как передать сообщение об ошибке в error.html.php? - PullRequest
5 голосов
/ 16 августа 2011

Я пытался использовать специальную переменную $message, описанную здесь http://www.symfony -project.org / cookbook / 1_2 / en / error_templates , но кажется, что эта переменная не определена в Symfony 1.4, по крайней мере, она не содержит сообщения, переданного исключению таким образом throw new sfException('some message')

Знаете ли вы другой способ передать это сообщение в error.html.php?

Ответы [ 3 ]

8 голосов
/ 16 августа 2011

Вам нужно будет выполнить некоторую пользовательскую обработку ошибок. Мы сами реализовали переход к пользовательскому действию 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')

1 голос
/ 21 февраля 2013

Я думаю, что нашел гораздо более простой ответ. В Symfony 1.4 $message действительно не определено, но $exception (оно содержит объект исключения).

Так что просто эхо $exception->message.

Et voilà!

0 голосов
/ 17 августа 2011

Я нашел еще одну хитрость для этого - 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'), вы должны использовать myToolkit::throwException('some message')

Для отображения сообщения в error.html.php используйте <?php echo sfContext::getInstance()->get('error_msg') ?>

...