Ahe galera como eu posso tratar a mensagem de erro pois ele aparece um alert bem grande, este erro é devido um produto que esta relacionado com um pedido e nao pode deletar o produto. Entao gostaria de customizar este erro com uma mensagem mais simples.
erro:
<h1>CDbException</h1>
<h3>Descrição</h3>
<p class="message">
CDbCommand falhou ao executar o comando SQL: SQLSTATE[HY000]: General error: 1451 Cannot delete or update a parent row: a foreign key constraint fails (protectm.itemspedido, CONSTRAINT itemspedido_ibfk_2 FOREIGN KEY (idproduto) REFERENCES produto (id) ON DELETE NO ACTION ON UPDATE NO ACTION)</p>
Estou tentando tratar a mensagem de erro e nao estou conseguindo, toda vez que clico em delete no grid ele retorna a mensagem como ptimeiro topico, entao resolvi colocando o codigo abaixo, onde estou errando pois nada acontece, não mostra o erro mais tb nao mostra a mensagem para o usuario:
public function actionDelete()
{
try {
if(Yii::app()->request->isPostRequest)
{
// we only allow deletion via POST request
$this->loadModel()->delete();
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
} catch (Exception $e) {
Yii::app()->user->setFlash('mensagem','<span class="ui-icon ui-icon-check"></span>Você não tem permissão para executar esta ação!');
$this->redirect('/sisadm/eventos/');
}
}
public function actionDelete()
{
try {
if(Yii::app()->request->isPostRequest)
{
// we only allow deletion via POST request
$this->loadModel()->delete();
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
} catch (Exception $e) {
Yii::app()->user->setFlash('mensagem','<span class="ui-icon ui-icon-check"></span>Você não tem permissão para executar esta ação!');
$this->redirect('/sisadm/eventos/');
}
}
Como pude reparar ele nao retorna nenhum erro na firebug, mais tb nao acontece nada, o delete deve estar fazendo uma requisiçao em ajax por aparece o loading no canto do grid. Eu nao sei como posso fazer pois so quero tratar o erro que quando tem alguma coisa relacionada nao pode deletar. O que acontece quando nao tem o try esta nos post acima.
Bom, não sei todas as respostas pra sua pergunta, mas vou tentar ajudar até onde eu posso.
Esse alerta bem grande, é pq as opções de debug estão ligadas. se vc for no index.php e comentar a linha
defined('YII_DEBUG') or define('YII_DEBUG',true);
essa mensagem vai diminuir e ficar apenas uma linha. Esta configuração é a recomendada para produção, pq ele não amostra informações úteis pra debug, como o trecho de código onde o erro ocorreu, ou, no seu caso, o SQL.
O problema é que personalizar a mensagem. Eu não sei fazer sem ser com o try. Talvez essa hora se aplique o que o gistavo falou acima.