Como personalizar templates de Erro
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 otrace
PHP$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.