Campo Obrigatório De Acordo Com A Visibilidade

Bom dia a todos,

Estou iniciando no YII framework e tenho uma dúvida.

Como faço para que um campo de um formulário se torne obrigatório apenas se a visibilidade for igual a "true"?

Tenho dois radios onde o usuário seleciona se a solicitação é de "terceiro" ou não. Caso selecione "sim", é exibido o nome do "terceiro" e o "rg". Segue abaixo os códigos:

form.css




.

.

.

div.form .requisicao_terceiro

{

	margin: 5px 0;

	display: none;

       

}

.

.

.



_form.php




<div class="row">

            <?Php

                Yii::app()->clientScript->registerScript('bt'," 

                 $(document).ready(function() {

               

                 $('#Requisicao_requisicao_terceiro_0').click(function(){

                    $('.requisicao_terceiro').show();

                    })

               

                  $('#Requisicao_requisicao_terceiro_1').click(function(){

                     $('.requisicao_terceiro').hide();

                  })

                

                  })",CClientScript::POS_READY); 

                  ?>

     

        </div>


<div class="row">

            <div class="compactRadioGroup">

        	<?php 

                 echo $form->labelEx($model,'requisicao_terceiro'); 

                 echo $form->radioButtonList($model, 'requisicao_terceiro',

                        array(  1 => 'Sim',

                                0 => 'Não',

                              ),

                        array( 'separator' => "  " ) ); // choose your own separator text

                    

               ?>

               <?php echo $form->error($model,'requisicao_terceiro'); ?>

            </div>

	</div>


	<div class="requisicao_terceiro">

		<?php echo $form->labelEx($model,'nome_terceiro'); ?>

		<?php echo $form->textField($model,'nome_terceiro',array('size'=>60,'maxlength'=>75)); ?>

		<?php echo $form->error($model,'nome_terceiro'); ?>

	</div>


	<div class="requisicao_terceiro">

		<?php echo $form->labelEx($model,'rg_terceiro'); ?>

		<?php echo $form->textField($model,'rg_terceiro',array('size'=>15,'maxlength'=>15)); ?>

		<?php echo $form->error($model,'rg_terceiro'); ?>

	</div>


	<div class="requisicao_terceiro">

		<?php echo $form->labelEx($model,'rg_org_exp_terceiro'); ?>

		<?php echo $form->textField($model,'rg_org_exp_terceiro',array('size'=>5,'maxlength'=>5)); ?>

		<?php echo $form->error($model,'rg_org_exp_terceiro'); ?>

	</div>




Aline,

O que se pode fazer é a verificação de acordo com o valor selecionado.

No seu módulo você cria uma regra de validação como:




...

array('nome_terceiro, rg_terceiro, rg_org_exp_terceiro', 'requiredTerceiro'),

...



E um novo método:




    public function requiredTerceiro($attribute, $params) {

        if ($this->requisicao_terceiro == 1 && trim($this->$attribute) == '') {

            $this->addError($attribute, $this->getAttributeLabel($attribute) . ' não pode ser vazio.');

        }

    }



Veja se resolve.

Bom dia, Andredelorme!

Obrigada pela ajuda, mas funcionou em partes, o único problema que ocorre é que se não preencher os campos do "terceiro" e clicar "salvar":

O formulário é recarregado com a validação correta, porém os campos aparecem ocultos devido a regra do css.0





div.form .requisicao_terceiro

{

	margin: 5px 0;

	display: none;

       

}




Existe algum método afterReload ou alguma forma de colocar uma verificação para só ocultar os campos se for a primeira vez que o formulário é exibido e clicado no radio na opção "não"?

Nas regras do model, vc tem que definir o campo como "required" em um determinado scenario.

Porém, pra fazer isso, vc vai precisar criar um ajax pra recarregar o campo quando vc selecionar o radio.

Pra definir como required em apenas um scenario, faça da seguinte forma:

Dentro do array rules, que fica dentro do model, vc coloca isso:




    array('campo','required','on'=>'nomescenario'),



Você então precisará criar a instância do model em questão, com esse scenario. Dá uma olhada nessa wiki que pode te ajudar:

http://www.yiiframework.com/wiki/266/understanding-scenarios