The symfony Cookbook

Como personalizar templates de Erro

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony Cookbook" which is licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com
symfony training
Be trained by symfony experts
Feb 21: Köln (Getting Started with Symfony2 - English)
Feb 27: Köln (Mastering Symfony2 - English)
Mar 05: Köln (Web Development with Symfony2 - Deutsch)
Mar 05: Montreal (Web Development with Symfony2 - English)
Mar 05: Montreal (Getting Started with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony Cookbook" in Brazilian Portuguese for the 1.2 version - Switch to version: - Switch to language:
Creative Commons License This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Translation of this work into another language is explicitly allowed.
This version of symfony is not maintained anymore.
If some of your projects still use this version, consider upgrading as soon as possible.

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:

404.html in the development environment

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:

404.html in the production environment

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):

404.xml in the development environment

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

404.xml in the production environment

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>

404.xml customized in the production environment

Quando você personaliza um template de mensagem de erro, você tem acesso as seguintes variáveis:

É 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.

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.