Yii 2 - tratando exceções de banco de dados.

44 views
Skip to first unread message

Rudinei Dias

unread,
Apr 6, 2017, 2:53:38 PM4/6/17
to YFB - Yii Framework Brasil
Olá todos.
Sou experiente em PHP mas em Yii sou novato.
Tenho pesquisado sobre tratamento de exceção de banco de dados no Yii2, mas não tenho encontrado nada satisfatório.
Gostaria de saber de vocês como estão tratando os retornos de erros do banco de dados derivados de (insert / update / delete).
No caso tenho uma exceção de exclusão (FK com registros dependentes) e estoura o erro que redireciona para uma página de erro default do yii2.
Desejo saber como rotear para tratar o erro na view que disparou o mesmo (view / index) de um programa gerado pelo GII no advanced model, sem estourar exceção ou ir para a página default.
Espero que eu tenha me expressado claramente.

Desde já obrigado.

Eric

unread,
Apr 6, 2017, 3:58:05 PM4/6/17
to yii-framew...@googlegroups.com
Olá Rudinei, tudo bem?!

Uma coisa que você pode fazer é um try catch com yii\db\Exception

Toda exceção lançada pelo banco vai cair aí e vc trata o erro e mostra como quiser, seja redirecionando pra uma view ou mostrando um alert.

Eric Maicon - ericmaicon.com.br


--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/yii-framework-brasil/f4179f65-9c69-425d-9318-74a2a64fb000%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Fábio Sales

unread,
Apr 7, 2017, 8:22:01 AM4/7/17
to yii-framew...@googlegroups.com
Rudinei,

Bom dia,

Utilizo a diretiva abaixo no meu arquivo web.php (template básico). Não sei precisamente em qual arquivo seria no template advanced:

    'on afterAction' => function ($event) {
        $exception = Yii::$app->errorHandler->exception;
        if ($exception instanceof \yii\db\IntegrityException) {
            $event->handled = true;
            Yii::$app->getSession()->setFlash('danger', 'Este registro é referenciado e não pode ser excluído.');
            return Yii::$app->getResponse()->redirect(Yii::$app->request->referrer)->send();
        }
    },

Atenciosamente,

Fábio Sales
Analista de tecnologia da informação
www.desenvolvemos.net


Eric Maicon - ericmaicon.com.br


Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsubscrib...@googlegroups.com.

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Rudinei Dias

unread,
Apr 7, 2017, 4:02:36 PM4/7/17
to yii-framew...@googlegroups.com
Era exatamente isto.
Eu já havia feito com try catch, mas estava lendo da classe errada (\Exception). 
e com o return Yii::$app->getResponse()->redirect(Yii::$app->request->referrer)->send();
retorna para a origem da execução.
Até simplificou meu código.
Perfeito!
Obrigado.

    public function actionDelete($id)
    {
if (!Yii::$app->user->can('deleteAmbientes')) throw new ForbiddenHttpException;
        try { 
           $this->findModel($id)->delete();
           return $this->redirect(['index']); 
        } catch (\yii\db\Exception $e) { 
           Yii::$app->getSession()->setFlash('deleteAmbientes',"O registro não pode ser exluído");
           return Yii::$app->getResponse()->redirect(Yii::$app->request->referrer)->send();
        } 
           
        return $this->redirect(['index']);
    }


------------------
Rudinei Dias


Eric Maicon - ericmaicon.com.br


Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsubscrib...@googlegroups.com.

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Rudinei Dias

unread,
Apr 7, 2017, 4:05:23 PM4/7/17
to yii-framew...@googlegroups.com
Achei interessante esta abordagem, criei até um ambiente basic padrão e apliquei. Coloquei o trecho de código nos componentes em web.php, mas não deu nenhum resultado. Configurei no ambiente advanced e também não.

Não tem alguma configuração a mais a fazer para funcionar?



------------------
Rudinei Dias

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Fábio Sales

unread,
Apr 8, 2017, 8:49:22 AM4/8/17
to yii-framew...@googlegroups.com
Rudinei,

Você pode compartilhar seu arquivo web.php? Eu acho qiue a diretiva não fica dentro de components, mas no mesmo nível.

Atenciosamente,

Fábio Sales
Analista de tecnologia da informação
www.desenvolvemos.net


------------------
Rudinei Dias

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Rudinei Dias

unread,
Apr 9, 2017, 12:18:48 AM4/9/17
to yii-framew...@googlegroups.com
Em anexo!

------------------
Rudinei Dias

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.
web.php

Sidney

unread,
Apr 11, 2017, 1:44:03 PM4/11/17
to yii-framew...@googlegroups.com
Olá Rudinei,

Para exceções de BD utilize, além do try/catch, as transactions:


Copiado e colado (to sem tempo):

$transaction = $connection->beginTransaction(); try { $connection->createCommand($sql1)->execute(); $connection->createCommand($sql2)->execute(); //.... other SQL executions $transaction->commit(); } catch (\Exception $e) { $transaction->rollBack(); throw $e; } catch (\Throwable $e) { $transaction->rollBack(); throw $e; }



Atenciosamente,
Sidney Lins
------

Em 6 de abril de 2017 15:53, Rudinei Dias <rudine...@gmail.com> escreveu:
--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.

Fábio Sales

unread,
Apr 13, 2017, 8:52:27 AM4/13/17
to yii-framew...@googlegroups.com
Rudinei,

Bom dia,

Desabilite o modo debug, comentando as linhas, no arquivo index.php:

//defined('YII_DEBUG') or define('YII_DEBUG', true);
//defined('YII_ENV') or define('YII_ENV', 'dev');



Atenciosamente,

Fábio Sales
Analista de tecnologia da informação
www.desenvolvemos.net

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsubscrib...@googlegroups.com.

--
Yii Framework Brasil
#######################################################################
 
Ao solicitar ajuda:
1. Explique o problema ou dificuldade. Seja específico!
2. Explique o que você *já tentou fazer* para resolver a situação;
3. MOSTRE CÓDIGO, sempre que possível. Esta é uma lista de programação!
 
LEMBRE-SE: se você demonstrar preguiça até mesmo para formular sua pergunta, não espere receber ajuda.
 
#######################################################################
 
04/2011: Anexos foram autorizados em votação. Use com moderação!
.
-
--
---
Você recebeu essa mensagem porque está inscrito no grupo "YFB - Yii Framework Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para yii-framework-brasil+unsub...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages