Como tratar a mensagem deste erro em um alert?

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>

valew




try {

        $model->delete();

      } catch (Exception $e) {

          // Seu código aqui

      }  



nas configurações principais faça algo como:




return array(

  'basePath'=>'myPath'

  //other config

  'onError'=>array('MinhaClasse','meuMetodoDeErro'),

);



que o erro vai ser tratado pela classe ‘MinhaClasse’ e pelo metodo ‘meuMetodoDeErro’

esse metodoDeErro vai receber como parametro um event do tipo CErrorEvent

ae você faz o que quer com o erro

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/');

             }


	}

como vc está fazendo a chamada na view? To supondo que, como é alert, esteja fazendo uma requisição ajax. Ta retornando o erro pelo DragonFly/Firebug?

Esta é a chamanda na view


$this->widget('backend.extensions.widgets.grid.CGridViewUI', array(

	'id'=>'clientes-grid',

	'dataProvider'=>$model->search(),

        'template' => '{summary}{items}{pager}',

        'summaryText'=>Yii::t('backend', 'Existe {start} - {end} de {count}'),

	'columns'=>array(

		'id',

		'nome',

		array(            // display 'create_time' using an expression

                         'name'=>'Descri&ccedil;&atilde;o',

                         'type'=>'raw',

                         'value'=> 'strip_tags(substr($data->corpo, 0 ,140))',

                 ),

		array(

			'class'=>'CButtonColumn',

		),

	),

));

E isso é o delete


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.

Onde sera que estou errando?

Espero que me ajudem.

Valew

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.

Blz vou testar.