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!
Newerton
(Newerton Araujo)
October 23, 2011, 7:18pm
3
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.
Newerton
(Newerton Araujo)
October 24, 2011, 4:25pm
5
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.
Newerton:
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
gusnips
(Gustavo)
October 24, 2011, 6:05pm
7
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.
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!!!
Newerton
(Newerton Araujo)
October 26, 2011, 10:40am
9
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.
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á.
gusnips
(Gustavo)
October 26, 2011, 6:47pm
10
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
gusnips
(Gustavo)
October 26, 2011, 6:49pm
11
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
djedy2005
(Edson)
October 27, 2011, 1:09pm
12
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