Xevious
(Xeviousbr)
August 27, 2014, 2:58pm
1
Pelo que vi poderia fazer isto utilizando cenários.
E também vi que tem um tuto pra cenários => http://www.yiiframework.com/wiki/266/understanding-scenarios
Mas to iniciando em Yii e não consegui sacar ainda como se faz…
Qualquer ajuda é bem vinda.
No View o campo esta assim
<?php echo $form->dropDownListRow($model, 'Reativo',
array('Sim'=>'Sim', 'Não'=>'Não'),
array('prompt' => 'Indique se é Reativo')); ?>
No models - rules esta assim
array('Reativo', 'length', 'max'=>3)
Já que não é obrigatório na adição…
Xevious:
Pelo que vi poderia fazer isto utilizando cenários.
E também vi que tem um tuto pra cenários => http://www.yiiframew …nding-scenarios
Mas to iniciando em Yii e não consegui sacar ainda como se faz…
Qualquer ajuda é bem vinda.
No View o campo esta assim
<?php echo $form->dropDownListRow($model, 'Reativo',
array('Sim'=>'Sim', 'Não'=>'Não'),
array('prompt' => 'Indique se é Reativo')); ?>
No models - rules esta assim
array('Reativo', 'length', 'max'=>3)
Já que não é obrigatório na adição…
Xevious não sei porque você não quer colocar o campo não obrigatório no Update (Pelo menos foi assim que entendi), pois você pode deixar e colocar o campo bloqueado no update, ai o usuário não vai conseguir mudá-lo.
Mais bem, você pode fazer assim, no model você cria a função beforeValidate() e trata essa informação dependente do scenario.
public function beforeValidate() {
if ($this->scenario == 'update') {
if (!$this->hasErrors('Reativo')) {
if (empty($this->Reativo)) {
$this->addError('Reativo', 'Campo Obrigatório.');
}
}
}
return parent::beforeValidate();
}
Ou até mesmo colocar a regra no rules assim
array('Reativo','required','on'=>'update'),
Xevious
(Xeviousbr)
August 27, 2014, 5:06pm
3
Acho que sua dica me serve, vou testar agora
mas oq queria é que ele fosse não-requerido, na adição
e obrigatório o preenchimento na edição
Xevious:
Acho que sua dica me serve, vou testar agora
mas oq queria é que ele fosse não-requerido, na adição
e obrigatório o preenchimento na edição
Fica assim:
public function beforeValidate() {
if ($this->isNewRecord) {
if (!$this->hasErrors('Reativo')) {
if (empty($this->Reativo)) {
$this->addError('Reativo', 'Campo Obrigatório.');
}
}
}
return parent::beforeValidate();
}
ou assim
array('Reativo','required','on'=>'create'),
Xevious
(Xeviousbr)
August 27, 2014, 7:35pm
5
Não funcionou
Precisa fazer alguma coisa pro evento beforeValidate ser chamado?
Eu cheguei a tacar um erro incondicional nele e ele nem bola
public function beforeValidate() {
throw new CHttpException(404,'ERRO.');
}
Xevious
(Xeviousbr)
August 27, 2014, 8:37pm
6
Consegui
O caso é que no evento ‘actionUpdate’ do controller estava sendo setado o evento ‘register’
$model->scenario='register';
Por isso quando colocava
array('Reativo', 'required', 'on'=>'update'),
no model não funcionava pq não ‘pegava’ o evento update
o ‘register’ é o mesmo evento que ocorre na adição…
mas … qual o motivo dele ter forçado essa mudança de evento?
testei adição e alteração ta certinho
mas fico meio assim né
deve ter um motivo pra ele ter feito isso
talvez nem precise mais…
tem alguma ideia?