Aline
(Alinevbarros)
October 5, 2012, 2:26pm
1
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>
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.
Aline
(Alinevbarros)
October 8, 2012, 1:55pm
3
andredelorme:
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"?
dyegonery
(Dyegonr)
October 8, 2012, 2:38pm
4
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