Capturando erros no Bootstrap com o Zend Framework

O bootstrap é um dos arquivos mais importantes na arquitetura de um sistema, pois toda requisição (seja ela via Ajax ou não) passa por ele, ou seja toda vez que um usuário vai executar uma funcionalidade que chame algum arquivo, vai antes passar pelo bootstrap pra depois ser liberado.

Aproveitando isso podemos capturar alguns erros que acontecem nesse momento, como erros de sessão ou de algum controller ou action que não existe, e trata-los.

Como ?


Primeira coisa que vamos fazer é colocar um try catch no nosso bootstrap (geralmente nomeado de index.php).

...
    require_once "Zend/Loader/Autoloader.php";

try{
//configurações do seu sistema
...
     $controlador->dispatch();
}catch( Zend_Exception $oException ){
//aqui capturamos o erro e tratamos ele

  if(get_class($oException) == 'Zend_Controller_Dispatcher_Exception'){
    print '<script type="text/javascript">document.location = "seusistema/index/pagina404/"</script>';
  }else{
    $dao = new ErroDAO();
    $dao->gravarLogErro($oException);
    print '<script type="text/javascript">alert('opa, aconteceu um erro, mas já estamos trabalhando para concerta-lo.');</script>';      
  }
}


Explicando
No catch temos o objeto $oException que contem uma série de informações sobre o problema que ocorreu.


Logo abaixo pegamos esse objeto e comparamos para saber se foi um erro do tipo "Zend_Controller_Dispatcher_Exception".

if(get_class($oException) == 'Zend_Controller_Dispatcher_Exception')

Com isso podemos saber se foi um problema de chamar um controller ou action que não existe. Dentro desse if há um código javascript para redireciona-lo para uma página 404, (página não encontrada).
No else, ou seja, caso o problema seja outro, enviamos o objeto $oException para uma DAO que vai trata-lo e gravar em alguma tabela. Assim podemos posteriormente gerar relatórios de erros capturados e tomar as medidas necessárias para corrigi-los.

E logo depois uma mensagem para o usuário!
Você pode mudar esse código da forma que preferir, ou que melhor atender os requisitos do seu sistema. O importante nesse momento é o objeto $oException.

Com o objeto  $oException, podemos pegar outras informações contidas nele, para saber o que aconteceu, aonde foi o erro e etc...


//ALGUMAS INFORMAÇÕES GERADAS PELO ERRO.
$oException->getCode();
$oException->getFile();
$oException->getLine();
$oException->getMessage();
$oException->getTraceAsString();


Você pode usar essas informações da maneira que preferir, enviando por email para o programador responsável, mostrando na tela, gravando em banco como no exemplo...

Espero ter ajudado.

1 comentários:

GeraldoGG disse...

Olá tenho um problema com uma página que utiliza o Zendframework nesta página só consigo abrir a página inicial e quando acesso os links recebo mensagem de página não encontrada.

Postar um comentário