Analisando erros no Laravel de maneira menos dolorosa

Analisando erros no Laravel de maneira menos dolorosa

2 de junho de 2017 2 Por Ramos de Souza Janones
Powered by Rock Convert

Quem usa o Laravel há bastante tempo deve-se lembrar daquela bonita tela de erros/debug que era exibida no Laravel versão 4 quando a aplicação era interrompida por algum erro/exception.

Você pode ver uma página demo neste link https://filp.github.io/whoops/demo .

Essa tela é do package filp/whoops que era fornecido junto ao core do Laravel 4.  Desde o lançamento do Laravel 5 esse package foi substituído pelo Symfony/Debug.

O Whoops é um package agnóstico (não é preso a um framework em específico) portanto, pode ser instalado via Composer em qualquer aplicação PHP moderna.  Sendo assim, neste post vou ensinar a como instala-lo corretamente no Laravel.

Curso de PHP ERP com NFe.

Atenção: Antes de colocarmos a mão na massa, vale reforçar que o Whoops é indicado apenas em ambiente de desenvolvimento, afinal,  não seria interessante  exibir uma tela de erros com um alto nível de detalhes e informações sigilosas para o usuário da sua aplicação.

1º – Passo

Editar o arquivo composer.json e adicionar o Whoops como dependência de desenvolvimento, veja:

 "name": "laravel/laravel",
 "description": "The Laravel Framework.",
 "keywords": ["framework", "laravel"],
 "license": "MIT",
 "type": "project",
 "require": {
 "php": ">=5.6.4",
 "laravel/framework": "5.3.*",
 "laravel/tinker": "~1.0"
 },
 "require-dev": {
 "fzaninotto/faker": "~1.4",
 "mockery/mockery": "0.9.*",
 "phpunit/phpunit": "~5.7",
 "filp/whoops": "2.1.*"
 },

O correto é adiciona-lo no índice require-dev, conforme o exemplo acima, isso facilita na hora do Deploy, pois basta executar o comando composer install –no-dev que tais dependências não serão baixadas em ambiente de produção.

2º – Passo:

Executar o comando composer update para atualizarmos as dependências e obviamente baixar todas as classes do Whoops.

3º – Passo:

Conforme mencionei anteriormente, esse package é agnóstico, sendo assim, ele não vem com um ServiceProvider onde possamos registrá-lo no arquivo config\app.php, conforme estamos acostumados com a instalação de outros packages Laravel.

Para “registrar” o Whoops em nossa aplicação vamos abrir o arquivo app/Exceptions/Handler.php e vamos adicionar um método que sera responsável por repassar os erros para o Whoops renderizar, veja:

<?php
    /**
     * Render an exception using Whoops.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception $e
     * @return \Illuminate\Http\Response
     */
    protected function renderExceptionWithWhoops($request, Exception $e)
    {
        $whoops = new \Whoops\Run;
        if ($request->ajax()) {
            $whoops->pushHandler(new \Whoops\Handler\JsonResponseHandler());
        } else {
            $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler());
        }
        return new \Illuminate\Http\Response(
            $whoops->handleException($e),
            $e->getStatusCode(),
            $e->getHeaders()
        );
    }

No método acima, instanciamos a classe Whoops, depois registramos o Handler que será responsável por fazer o ‘parse’ do erro, note que nesta etapa fizemos uma verificação se a requisição é  AJAX ou não, se for AJAX o correto é retorna um JSON e não uma página HTML; Por fim,  retornamos uma Response com todos os dados já formatados.

Com nosso método criado, devemos agora desviar o fluxo das exceptions para ele, podemos fazer isso de maneira fácil editando o método render() ainda dentro do arquivo Handler.php, veja:

Curso completo de Games, inclusive Realidade Aumentada.Powered by Rock Convert
<?php
    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
         if (config('app.debug') && config('app.env') == 'local') {
            return $this->renderExceptionWithWhoops($request, $exception);
        }
        return parent::render($request, $exception);

Perceba que restringimos a renderização do Whoops apenas em ambiente local com debug ativado.

Segue abaixo o arquivo Handler.php completo:

Pronto! Agora você pode forçar um erro na sua aplicação para visualizar a sua mais nova e elegante tela de Debug.

P.S.( Neste exemplo, utilizei o Laravel 5.4 e Whoops 2.1.5. Mas, você pode aplicar isso para qualquer versão >= 5 sem muito esforço.. )

Outros tutoriais e dicas sobre PHP:

Gostou da dica? Viu algum erro? Não conseguiu implementar? Comente!

Aproveitando, segue nossa indicação:

Curso de Laravel – Plataforma EAD (LaraSchool), foi criado pelaEspecializaTi. Resumidamente: Neste curso você vai aprender a criar uma plataforma ead multi usuários, onde qualquer pessoa pode se cadastrar no sistema e postar cursos e comercializar e ainda aprenderá como integrar o Laravel com um dos gateways de pagamentos mais famosos que existem para produtos digitais, o HotMart. Espero que goste desta dica! 😉

Subscribe to our mailing list

* indicates required


Além de PHP e MySQL, deseja receber outro tema?
LEIA TAMBÉM:  Sistemas de Temas do CakePHP
Email Format


Powered by Rock Convert
Curso de Inglês para Programadores.Powered by Rock Convert

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.