Yii Framework Forum: Validar Model Sem Salvar - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Validar Model Sem Salvar Rate Topic: -----

#1 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 07 May 2013 - 11:51 AM

Boa tarde, estou fazendo um subform que envia os dados via ajax e salva na sessão porem gostaria de validar estes dados como faço?
0

#2 User is offline   Wanderson 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 71
  • Joined: 20-February 09
  • Location:Rio de Janeiro, Brazil

Posted 07 May 2013 - 11:55 AM

Já tentou usar:
if( $model->validate() ) {
 // dados válidos
}

0

#3 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 07 May 2013 - 12:12 PM

View PostWanderson, on 07 May 2013 - 11:55 AM, said:

Já tentou usar:
if( $model->validate() ) {
 // dados válidos
}


Já mas não obtive exito, esqueci de especificar. Estou usando um modal do yii - bootstrap então teria que ser validação ajax pois ao submeter ele fecha o modal e após instalar o Yii-Bootstrap não consegui mais realizar validação ajax acredito que seja de uma maneira diferente, vou postar o código para facilitar
0

#4 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 07 May 2013 - 12:18 PM

_form.php
<div class="form">

<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
	'id'=>'associados-form',
	'enableAjaxValidation'=>true,
)); ?>

	<p class="note">Campos com <span class="required">*</span> são obrigatórios.</p>

	<?php
		echo $form->textFieldRow($model['Associados'],'nome',array('size'=>60,'maxlength'=>150));
		echo $form->textFieldRow($model['Associados'],'cnpj',array('size'=>20,'maxlength'=>20));
		echo $form->textFieldRow($model['Associados'],'endereco',array('size'=>60,'maxlength'=>200));
		echo $form->textFieldRow($model['Associados'],'bairro',array('size'=>60,'maxlength'=>200)); 
		echo $form->textFieldRow($model['Associados'],'cidades_id');
		echo $form->textFieldRow($model['Associados'],'cep',array('size'=>20,'maxlength'=>20));
		echo $form->textFieldRow($model['Associados'],'telefone',array('size'=>20,'maxlength'=>20));
		echo $form->textFieldRow($model['Associados'],'cxpostal');
		echo $form->textFieldRow($model['Associados'],'email',array('size'=>60,'maxlength'=>150));
		echo $form->textFieldRow($model['Associados'],'codigo');
		echo $form->textFieldRow($model['Associados'],'imagem',array('size'=>60,'maxlength'=>150));
		echo $form->textFieldRow($model['Associados'],'tipo');
		echo $form->textFieldRow($model['Associados'],'ativo');
		echo $form->textFieldRow($model['Associados'],'site',array('size'=>60,'maxlength'=>150));
		echo $form->textFieldRow($model['Associados'],'logo',array('size'=>60,'maxlength'=>150));
		echo $form->textFieldRow($model['Associados'],'inscricao_estadual',array('size'=>50,'maxlength'=>50));
		echo $form->textFieldRow($model['Associados'],'contato',array('size'=>60,'maxlength'=>150));
		echo $form->textFieldRow($model['Associados'],'data_fundacao');
		echo "<br/>";
		$this->widget('bootstrap.widgets.TbButton', array(
    		'label'=>'Adicionar Diretor',
    		'type'=>'primary',
    		'htmlOptions'=>array(
        		'data-toggle'=>'modal',
        		'data-target'=>'#myModal',
    		),
		));
	?>
	<div id='diretores'></div>
	<div class="form-actions">
    	<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'type'=>'primary', 'label'=>$model['Associados']->isNewRecord ? 'Criar' : 'Atualizar')); ?>
    	<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'reset', 'label'=>'Limpar')); ?>
	</div>
<?php $this->endWidget(); ?>

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

<?php 
$this->beginWidget('bootstrap.widgets.TbModal', array('id'=>'myModal'));
	echo $this->renderPartial('_form_diretores',array('model'=>$model));
 $this->endWidget(); 
 ?>

_form_diretores.php
<?php
/*
 * Modal para adicionar diretores
 */
 $scriptDiretores='	
 function adicionaDiretores(diretores) {
		objDiretores = eval(diretores);
		table = "<table>";
		for (var i in objDiretores) {
			table+="<tr id=\'"+i+"\'>";
			table+="<td>"+objDiretores[i].nome+"</td>";
			table+="<td>"+objDiretores[i].telefone+"</td>";
			table+="<td>"+objDiretores[i].email+"</td>";
			table+="<td onclick=\'excluirDiretores("+i+")\'>&times;</td>";
			table+="</tr>";
		}
		
		table+="</table>";
		$(\'#diretores\').html(table);
	}
 function excluirDiretores(id) {
	$.ajax({
		type: "POST",
		url: "'.$this->createUrl("/admin/associados/deletediretores").'",
		data: {diretor: id},
		success:function(){
			$("#diretores #"+id+"").slideUp();
		}
		
	});
}';

Yii::app()->clientScript->registerScript('diretores',$scriptDiretores,CClientScript::POS_END);
?>
<div class="modal-header">
    <a class="close" data-dismiss="modal">&times;</a>
    <h4>Adicionar Diretores</h4>
</div>
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
	'id'=>'diretores-form',
	'action' => $this->createUrl('/admin/associados/creatediretores'),
	'enableAjaxValidation'=>true,
)); ?>
<div class="modal-body">
<?php
	echo $form->textFieldRow($model['Diretores'],'nome');
	echo $form->textFieldRow($model['Diretores'],'telefone');
	echo $form->textFieldRow($model['Diretores'],'email');
	
?>
<div class="modal-footer">
    <?php $this->widget('bootstrap.widgets.TbButton', array(
    	'buttonType' => 'ajaxSubmit',
        'type'=>'primary',
        'label'=>'Salvar',
        'url' => Yii::app()->createUrl('/admin/associados/creatediretores'),
        'htmlOptions'=>array('data-dismiss'=>'modal'),
        'ajaxOptions'=>array(
        	'success' => "function(diretores){adicionaDiretores(diretores)}",
		)
    )); ?>
    <?php $this->widget('bootstrap.widgets.TbButton', array(
        'label'=>'Fechar',
        'url'=>'#',
        'htmlOptions'=>array('data-dismiss'=>'modal'),
    )); ?>
</div>
<?php $this->endWidget(); ?>
</div>

Primeira vez que faço isto então aceito dicas de melhorias também =)
0

#5 User is offline   Wanderson 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 71
  • Joined: 20-February 09
  • Location:Rio de Janeiro, Brazil

Posted 07 May 2013 - 09:11 PM

Thiago,

Pelo que entendi você quer submeter um form via AJAX em um "Modal" certo?

Faça as seguintes alterações:

Primeiro passo alterar os parâmetros do form para:


<div class="form">
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
	'id'=>'associados-form',
	'enableAjaxValidation'=>false,
	'enableClientValidation'=>true,
	'clientOptions'=>array(
		'validateOnSubmit'=>true,
	),
)); ?>




Em seguida modifique seu botão submit para:


<?php
$this->widget('bootstrap.widgets.TbButton', array(
    'buttonType'=>'ajaxSubmit',
    'type'=>'primary',
    'label'=>'Salvar',
    'ajaxOptions'=>array(
        'data'=>'js:jQuery("#associados-form").serialize()',
        'dataType'=>'json',
        'success'=>'function(data){
            if(Object.keys(data).length == 0){
                $("#myModal").modal("toggle");
            }else{
                $.each(data, function(key, val) {
                    $("#associados-form #"+key+"_em_").text(val);
                    $("#associados-form #"+key+"_em_").show();
                });
            }
        }',
    )
));
?>




Agora na action do seu controller:




<?php
  $modelAssociados = new Associados;
  if( Yii::app()->request->isAjaxRequest && isset($_POST['Associados']) ) {
    $errors = CActiveForm::validate($modelAssociados);
    if($errors !== '[]') {
        Yii::app()->end($errors);
 	}else{
        $modelAssociados->save(false);
        Yii::app()->end($errors);
    }
  }
?>



Bom fiz aqui nas preças mas acredito que irá funcionar.

Abraços
0

#6 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 08 May 2013 - 07:56 AM

View PostWanderson, on 07 May 2013 - 09:11 PM, said:

Thiago,

Pelo que entendi você quer submeter um form via AJAX em um "Modal" certo?

Faça as seguintes alterações:

Primeiro passo alterar os parâmetros do form para:


<div class="form">
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(
	'id'=>'associados-form',
	'enableAjaxValidation'=>false,
	'enableClientValidation'=>true,
	'clientOptions'=>array(
		'validateOnSubmit'=>true,
	),
)); ?>




Em seguida modifique seu botão submit para:


<?php
$this->widget('bootstrap.widgets.TbButton', array(
    'buttonType'=>'ajaxSubmit',
    'type'=>'primary',
    'label'=>'Salvar',
    'ajaxOptions'=>array(
        'data'=>'js:jQuery("#associados-form").serialize()',
        'dataType'=>'json',
        'success'=>'function(data){
            if(Object.keys(data).length == 0){
                $("#myModal").modal("toggle");
            }else{
                $.each(data, function(key, val) {
                    $("#associados-form #"+key+"_em_").text(val);
                    $("#associados-form #"+key+"_em_").show();
                });
            }
        }',
    )
));
?>




Agora na action do seu controller:




<?php
  $modelAssociados = new Associados;
  if( Yii::app()->request->isAjaxRequest && isset($_POST['Associados']) ) {
    $errors = CActiveForm::validate($modelAssociados);
    if($errors !== '[]') {
        Yii::app()->end($errors);
 	}else{
        $modelAssociados->save(false);
        Yii::app()->end($errors);
    }
  }
?>



Bom fiz aqui nas preças mas acredito que irá funcionar.

Abraços

Valeu, é quase isto a questão é que são dois forms um form normal e um subform em um modal, o que da submit via ajax está no modal "_form_diretores.php" o "_form" está funcionando validando etc, preciso validar o subform que está no modal e da submit via ajax porém é da mesma action. Não é uma solução muito boa mas preciso que o usuário possa adicionar quantos diretores quiser em um subform de associados pois associados has_many diretores e foi a solução mais simples que encontrei.
0

#7 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 08 May 2013 - 08:35 AM

Eu vou fazer separado os forms por enquanto até descobrir como fazer então gostaria de saber a solução mais comun em forms relacionados com has_many?
0

#8 User is offline   Wanderson 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 71
  • Joined: 20-February 09
  • Location:Rio de Janeiro, Brazil

Posted 08 May 2013 - 11:14 AM

View Postthiago.silva, on 08 May 2013 - 08:35 AM, said:

Eu vou fazer separado os forms por enquanto até descobrir como fazer então gostaria de saber a solução mais comun em forms relacionados com has_many?


Eu costumo fazer algo parecido com isso: http://www.eha.ee/la...iew=dynamicrows
0

#9 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 08 May 2013 - 01:50 PM

View PostWanderson, on 08 May 2013 - 11:14 AM, said:

Eu costumo fazer algo parecido com isso: http://www.eha.ee/la...iew=dynamicrows

Era exatamente isto que queria inicialmente mas por não ter achado nada a respeito de como fazer desisti. Tem como baixar so esta extensão? só achei o download do pacote completo.
0

#10 User is offline   thiago.silva 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 94
  • Joined: 13-February 13

Posted 09 May 2013 - 07:23 AM

Consegui utilizando a extensão: MultiModelForm
muito boa e simples de usar, valeu
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users