setFlash() nao funciona se tive performAjaxValidation(), alguem pode me ajudar?

Gostaria de saber se ja aconteceu com alguem um problema parecido com o meu:

Seguinte tem a avalidaçao do formulario via ajax, quando eu salvo o registro ele nao mostra a mensagem setada no SetFlash no index, mais quando eu desativo a validaçao via ajax ele mostra a mensagem.

Creio eu que esta tendo um conflito ou tem que ativar alguma coisa, sera que alguem pode me ajudar.

Tenho este codigo:




public function actionCreate()

	{

		$model=new Usuario;


		// Uncomment the following line if AJAX validation is needed

	         $this->performAjaxValidation($model);


		if(isset($_POST['Usuario']))

		{

			$model->attributes=$_POST['Usuario'];

			if($model->save()){

                                Yii::app()->user->setFlash('success','Usuário cadastrado com sucesso!');

				$this->redirect(array('index'));

                        }else{

                                Yii::app()->user->setFlash('error','Erro ao atualizar vefique os campos obrigatórios');

                        }

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}



Valew desde já

Alguem nunca teve este problema para poder me ajuda!

Posta seu create.php

Já tento comentar a linha:


$this->redirect(array('index'));



E ver se no create.php está indo o setFlash()?

No index que você está direcionando não tem em outro página o setFlash(‘success’), uma vez eu tinha problema com setFlash, que não enviav a sessão para a página correta não sei por que motivo.

Entao Newerton,

Euu nao sei o que acontece, mais vou postar o que vc pediu:

Esta é o index onde deve aparecer a mensagem.




<div class="page-header-new">

       <h1>Usuários</h1>

</div>


<div id="statusMsg">

<?php if(Yii::app()->user->hasFlash("success")):?>

    <div class="alert-message block-message success">

        <img src="/images/ok.png" width="24" height="24" alt="ok"/>

        <?php echo Yii::app()->user->getFlash("success"); ?>

    </div>


<?php endif; ?>

 

<?php if(Yii::app()->user->hasFlash("error")):?>

    <div class="alert-message block-message error">

        <img src="/images/error.png" width="24" height="24" alt="ok"/>

        <?php echo Yii::app()->user->getFlash("error"); ?>

    </div>

<?php endif; ?><?php

        Yii::app()->clientScript->registerScript('myHideEffect','$("#statusMsg").delay(9000).animate({ height: "toggle", opacity: "toggle" }, "slow");',

        CClientScript::POS_READY

);

?>  

</div>

aqui o Create:




<div class="page-header-new">

       <h1>Novo Usuário</h1>

</div>

<div>  

   <?php echo $this->renderPartial('_form', array('model'=>$model)); ?></div>




form





<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'usuario-form',

	'enableAjaxValidation'=>false,

        'htmlOptions' =>array('class'=>'form-stacked'),

       

        

));

 ?>

    

     <h2>Os campo em *(em laranja) são obrigatórios</h2>

     <br />

   ....




</div><!-- form -->



Como eu disse se desativar o validaçao via ajax funciona e se tive nao funcione.

Faça um teste, comenta o $this->redirect().

E veja se está indo o setFlash() para o create.php

Coloca o hasFlash() no create.php




<?php if(Yii::app()->user->hasFlash("success")):?>

    <div class="alert-message block-message success">

        <img src="/images/ok.png" width="24" height="24" alt="ok"/>

        <?php echo Yii::app()->user->getFlash("success"); ?>

    </div>


<?php endif; ?>

 

<?php if(Yii::app()->user->hasFlash("error")):?>

    <div class="alert-message block-message error">

        <img src="/images/error.png" width="24" height="24" alt="ok"/>

        <?php echo Yii::app()->user->getFlash("error"); ?>

    </div>

<?php endif; ?>



Como relatei já, já tive problema com redirect também.

Desta forma funciona.

Eu nao sei o que acontece deve ser o redirect mesmo…

Valew

setFlash guarda os dados por uma requisição apenas

quando ocorre a validação por ajax a requisição é feita, o flash não é usado e é apagado.

Ham sim blz valew a explicação…é bom saber!!!

Gustavo,

Posta uma solução para nós, eu mesmo com pouco tempo, não achei uma solução correta.

Já passei por isso já.

Opa

Eu não costumo usar validação ajax, mas dessa forma deve funcionar

na config do user sete autoUpdateFlash para false e use o getFlash normalmente, pois o 3º parametro de getFlash ‘delete’ é por padrão true, assim:




// config/main.php

components=>array(

'user'=>array(

 'autoUpdateFlash'=>false

),

),

// usando o flash

if(user()->hasFlash('teste')){

  echo user()->getFlash('teste');//o 3º parametro 'delete' é por padrão true

}




creio que isso resolve

Opa

Eu não costumo usar validação ajax, mas dessa forma deve funcionar

na config do user sete autoUpdateFlash para false e use o getFlash normalmente, pois o 3º parametro ‘delete’ é por padrão true, assim:




// config/main.php

components=>array(

'user'=>array(

 'autoUpdateFlash'=>false

),

),

// usando o flash

// user()=Yii::app()->user

if(user()->hasFlash('teste')){

  echo user()->getFlash('teste');//o 3º parametro 'delete' é por padrão true

}




creio que isso resolve

Interessate vou testar depois…

Valew