Quando um erro ocorre, seja um erro de pagina não encontrada, o erro interno do servidor, ou qualquer outra exceção o symfony mostra uma pagina de erro. O conteúdo da pagina depende do ambiente e do formato da requisição.
Vamos ver um exemplo para explicar melhor.
Tendo uma aplicação com um módulo API que retorna representações HTML, XML or JSN do modelo Article.
Aqui esta a configuração de roteamento que faz isso funcionar:
// apps/frontend/config/routing.yml
api_article:
url: /api/article/:id.:sf_format
param: { module: api, action: article }
requirements:
sf_format: (?:html|xml|json)
e o módulo associado:
class apiActions extends sfActions { public function executeArticle($request) { $this->article = ArticlePeer::retrieveByPK($request->getParameter('id')); $this->forward404Unless($this->article); } // ... }
Se você passar um id não existente na requisição, a ação é encaminhada para a pagina de erro 404. Se você o
formato HTML (http://localhost/frontend_dev.php/api/article/1.html) em ambiente de desenvolvimento, você vai receber
uma mensagem de erro como essa:

Em ambiente de produção (http://localhost/frontend_dev.php/api/article/1.html), a pagina é bem diferente, por razões
óbvias de segurança:

Agora vamos ver como isso se comporta se mudarmos o formato para XML no ambiente de desenvolvimento
(http://localhost/frontend_dev.php/api/article/1.xml):

E agora, no ambiente de produção (http://localhost/api/article/1.xml):

Como você mesmo pode ver, a mensagem de erro retornado pelo symfony esta agora no formato requisitado, XML.
Esse exemplo demonstra como as mensagens são personalizadas para uma pagina 404, mas o mesmo acontece para
qualquer outra exceção não capturada.
Você sempre pode personalizar a saída de cada formato adicionando um template no diretório de seu projeto
(config/error/) ou no diretório da aplicação (apps/frontend/config/error/).
Por exemplo, para personalizar a saída XML de mensagens de erro, crie um arquivo config/error/error.xml.php.
O symfony é esperto o suficiente para usar o template personalizado se ele existir, ao invés do padrão:
<?xml version="1.0" encoding="<?php echo sfConfig::get('sf_charset', 'UTF-8') ?>"?>
<error>
<code><?php echo $code ?></code>
<message><?php echo $text ?></message>
</error>

Quando você personaliza um template de mensagem de erro, você tem acesso as seguintes variáveis:
$code: O código de status da resposta(response)$text: O texto do status da resposta(response)$name: O nome da classe da Exceção$message: A mensagem da Exceção$traces: Um array contendo todo otracePHP$format: O formato requisitado
É também possível personalizar a saida do ambiente de desenvolvimento, mesmo que isso
não seja muito interessante, criando um arquivo config/error/exception.xml.php.
Os templates padrão são armazenados no diretório lib/exception/data/ da instalação do symfony e
um bom ponto de inicio para customizar templates.
Quando você criar seu próprio formato, você vai precisar criar os templates de mensagens de erro apropriados
(config/error/error.FORMAT_NAME.php e config/error/exception.FORMAT_NAME.php).
Para facilitar essa tarefa, você pode incluir um template de erro existente. Por exemplo, se o seu formato é tipo XML você pode incluir o template de mensagem de erro XML padrão:
<?php include sfException::getTemplatePathForError('xml', true) ?>
Suporte a formato é mais outro exemplo de que o symfony 1.2 esta abraçando o HTTP o quanto for possível.
This work is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.