Yii Framework Forum: Dúvida Com Validação Detalhada De Formulário - Yii Framework Forum

Jump to content

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

Dúvida Com Validação Detalhada De Formulário Rate Topic: ***** 1 Votes

#1 User is offline   Renato Cassino 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 20-May 13

Posted 12 July 2013 - 08:53 AM

Olá! Sou novo no Yii Framework e estou fazendo um formulário de cadastro em etapas.

Na primeira página a validação vai ser somente nome,sobrenome e email.

Nessa parte estou validando os três campos corretamente, pois editei o método rules() do modelo Usuario para isso.

Minha controller está dessa forma:
	$usuario = new Usuario();
	// Se o cadastro foi submetido
	if(isset($_POST['Usuario']))
	{
		$usuario->step = 1;
		$usuario->attributes=$_POST['Usuario'];
		if($usuario->validate())
			$this->redirect(Yii::app()->createUrl('conta/step2'));
	}


Ele está validando tudo corretamente, porém eu quero que nessa validação, antes de tudo verifique se o email já existe no banco de dados, para que não haja duplicidade de email.
Eu devo fazer isso no modelo ou devo fazer isso no método validate() ?

Outra coisa, como eu posso disparar um erro para o errorSummary() na view?

Desde já agradeço
0

#2 User is offline   Wanderson 

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

Posted 12 July 2013 - 09:57 AM

View PostTacno, on 12 July 2013 - 08:53 AM, said:

Olá! Sou novo no Yii Framework e estou fazendo um formulário de cadastro em etapas.

Na primeira página a validação vai ser somente nome,sobrenome e email.

Nessa parte estou validando os três campos corretamente, pois editei o método rules() do modelo Usuario para isso.

Minha controller está dessa forma:
	$usuario = new Usuario();
	// Se o cadastro foi submetido
	if(isset($_POST['Usuario']))
	{
		$usuario->step = 1;
		$usuario->attributes=$_POST['Usuario'];
		if($usuario->validate())
			$this->redirect(Yii::app()->createUrl('conta/step2'));
	}


Ele está validando tudo corretamente, porém eu quero que nessa validação, antes de tudo verifique se o email já existe no banco de dados, para que não haja duplicidade de email.
Eu devo fazer isso no modelo ou devo fazer isso no método validate() ?

Outra coisa, como eu posso disparar um erro para o errorSummary() na view?

Desde já agradeço


Habilite a validação Ajax no Controller e no form da view.


Agora no seu modelo adicione nas regras de validação o código abaixo que irá validar se já existe cadastro para o e-mail informado.


public function rules()
{
  return array(
    ...
    array('email', 'unique', 'on'=>'step1', 'message'=>'Já existe um cadastro para este e-mail!'), // adicione esta linha
    ...
  );
}



No seu controller quando você faz:

$usuario = new Usuario();


Mude o cenário passando "step1" para o construtor da classe Usuário

$usuario = new Usuario('step1');

0

#3 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 824
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 12 July 2013 - 10:00 AM

Tacno,

Você faz essa validação de email existente na função validate() (beforeValidate()), mais é bom você fazer essa validação somente na actionCreate, por que se você for editar alguma informação do usuario, ele vai validar e não vai deixar salvar, e bom você bloquear a edição de email na actionUpdate.

Segue abaixo o modelo da função que você deve seguir como exemplo:

public function beforeValidate() {
	if($this->scenario == 'insert') {
		$email = self::model()->find('email = :email', array(':email' => $this->email));
		if (!is_null($email))
			$this->addError('email', 'E-mail já cadastrado.');
	}
	return parent::beforeValidate();
}


Por padrão, a inserção de dados, o Yii interpreta o cenário como 'insert', e a atualização de dados como 'update', então por isso que foi definido somente no scenario insert
Newerton Vargas de Araújo
0

#4 User is offline   Renato Cassino 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 24
  • Joined: 20-May 13

Posted 12 July 2013 - 01:55 PM

Funcionou perfeitamente!!
=D

Muito obrigado pela ajuda.
Um abraço!
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