Módulo de página de erros

13 views
Skip to first unread message

Diogo Machado

unread,
Nov 20, 2013, 8:11:15 AM11/20/13
to kohan...@googlegroups.com
Bom dia pessoal, a algum tempo eu venho pensando em criar um módulo para páginas de erro. No local onde trabalho nós temos muitos portais e aplicações, e fica dificil dar manutenção em todas as views extendidas do kohana, aquelas /views/kohana/error.php, alguém sugere alguma implementação? Eu pensei via módulo, mais nem sei como faria para chamar na app.

Douglas J.A.M

unread,
Nov 20, 2013, 8:41:38 AM11/20/13
to kohan...@googlegroups.com

/classes/Helper/Erros.php

<?php

defined('SYSPATH') or die('No direct script access.');

class Helper_Erros {
    
 public static function addErrorLog($errorLog = array()) {

        $erro = ORM::Factory('Erro');

        $erro->datahora = Helper_Datahora::getDateTime('now');
        $erro->usuario_id = Helper_Usuario::getUsuario()->id;
        $erro->ip = $_SERVER['REMOTE_ADDR'];
        $erro->host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
        $erro->url = Request::current()->uri();
        $erro->post = json_encode(Request::current()->post());
        
        $erro->values($errorLog);

        $erro->save();
    }

}

?>

/classes/HTTP/Exception

<?php

defined('SYSPATH') or die('No direct script access.');

class HTTP_Exception extends Kohana_HTTP_Exception {

    public function get_response() {

        Kohana_Exception::log($this);

        if (Kohana::$environment === Kohana::DEVELOPMENT) {
            return parent::get_response();
        } else {

            $errorCode = $this->getCode();
            if (!in_array($errorCode, array(404, 500)))
                $errorCode = 500;

            $errorLog = array(
                'class' => get_class($this),
                'code' => $this->getCode(),
                'message' => $this->getMessage(),
                'file' => $this->getFile(),
                'line' => $this->getLine(),
            );

            $attributes = array(
                'action' => $errorCode,
            );

            Helper_Erros::addErrorLog($errorLog);
            
            $route = Route::get('erros')
                    ->uri($attributes);

            $view = Request::factory()
                    ->uri($route)
                    ->post('errorLog', $errorLog)
                    ->execute()
                    ->send_headers()
                    ->body();
            

            $response = Response::factory()
                    ->status($this->getCode())
                    ->body($view);

            return $response;
        }
    }

}


// controler de erros

<?php

defined('SYSPATH') or die('No direct script access.');

class Controller_sistemaxpto_Erros extends Template_Sistema {

    public $ormName = 'Erro';
    public $roles = 'Administrador;';

    public function action_index() {
        $this->action_listagem();
    }

    public function action_listagem() {

        $erros = ORM::factory($this->ormName)
                ->limit(10)
                ->find_all();

        $qtdeErros = ORM::factory($this->ormName)
                ->count_all();

        // pesquisa
        $campos = ORM::factory($this->ormName)->_pesquisa;
        $pesquisa = Helper_NavPesquisa::getFormPesquisar($campos);

        $paginacao = Helper_Paginacao::getPaginacao('/sistemaxpto/erros/listagem?${page}', $qtdeErros);

        $view = View::Factory('sistema/sistemaxpto/erros/listagem');
        $view->set('erros', $erros);
        $view->bind('pesquisa', $pesquisa);
        $view->bind('paginacao', $paginacao);
        $this->template->content = $view;
    }

    public function action_404() {

        $post = Request::current()->post();
        $errorLog = $post['errorLog'];

        $view = View::Factory('erros/404');
        $view->set('errorLog', $errorLog);
        $this->template->content = $view;
    }

    public function action_500() {

        $post = Request::current()->post();
        $errorLog = $post['errorLog'];

        $view = View::Factory('erros/500');
        $view->set('errorLog', $errorLog);
        $this->template->content = $view;
    }

    public function action_503() {

        $post = Request::current()->post();
        $errorLog = $post['errorLog'];

        $view = View::Factory('erros/503');
        $view->set('errorLog', $errorLog);
        $this->template->content = $view;
    }

}


// view de erros

<div class="container_16 navigator">
    <span class="titulo">
        <a href="<?php echo Request::current()->uri(); ?>">
            <img src="/media/imagens/icones/alerta.png"> Erro 404
        </a>
    </span>
</div>

<div class="container_16">
    <?php if (Helper_Notificacao::hasNotificacoes()) { ?>
        <?php echo Helper_Notificacao::getNotificacoes(); ?>
    <?php } ?>
</div>

<div class="container_16">
    <div class="grid_16 conteudo">
        <p>A página que você tentou encontrar não existe ou foi removida, tente utilizar os links e menus de navegação para acessa-lá, caso o erro ainda continue, entre em contato conosco clicando <a href="/sgme/suporte/novo">aqui</a></p>
        <div id="errorbox">
            <div id="errorboxmostrarmais">
                <a href="#">Mostrar mais detalhes do erro</a>
            </div>
            <div id="errorboxinformacoes">
                <span class="datahora"><b>Data/Hora:</b> <?php echo Helper_Datahora::getDateTime('now'); ?></span><br />
                <span class="url"><b>URL:</b> <?php echo Request::current()->url(); ?></span><br />
                <span class="code"><b>Erro:</b> <?php echo $errorLog['code']; ?></span><br />
                <span class="class"><b>Classe:</b> <?php echo $errorLog['class']; ?></span><br />
                <span class="line"><b>Linha:</b> <?php echo $errorLog['line']; ?></span><br />
                <span class="mensagem"><b>Mensagem</b> <?php echo $errorLog['message']; ?></span>
            </div>
        </div>
        <p>Para voltar para a página principal <a href="/">clique aqui</a></p>
    </div>
</div>


Em 20 de novembro de 2013 11:11, Diogo Machado <di...@diogomachado.com> escreveu:
Bom dia pessoal, a algum tempo eu venho pensando em criar um módulo para páginas de erro. No local onde trabalho nós temos muitos portais e aplicações, e fica dificil dar manutenção em todas as views extendidas do kohana, aquelas /views/kohana/error.php, alguém sugere alguma implementação? Eu pensei via módulo, mais nem sei como faria para chamar na app.

--
Você está recebendo esta mensagem porque se inscreveu no grupo "Kohana Php" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para kohana-php+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para kohan...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/kohana-php.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Reply all
Reply to author
Forward
0 new messages