Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera, to eu aqui novamente!rs
Eu to precisando da ajuda de vocês novamente.
Eu criei um modelo e um controle chamado Usuarios.
E tem duas ações 'cadastro' e 'login'.
Fiz a parte de cadastro com a validação, tá tudo certo.
Mas na parte de login da dando erro, ele tá validando ( e quero que faça isso mesmo) mas tem o campo de e-mail que no cadastro eu verifico se ele é unico. Mas na hora de logar ele também esta verificando isso, só quero que faça isso no cadastro.
Em pesquisa estão falando para usar "'on' => 'create'", mas não deu certo.
Alguem sabe como fazer?
valeu!
Beleza.
Model
class Usuario extends AppModel {
var $name = 'Usuario';
var $validate = array(
'nome' => array(
'notempty'=> array('rule' => 'notempty',
'message' => 'Digite seu nome!')
),
'email' => array(
'notempty'=> array('rule' => 'notempty',
'message' => 'Digite seu e-mail!'),
'isUnique'=> array('rule' => 'isUnique',
'message' => 'Essa e-mail já esta cadastrado!',
'on' => 'create'
)
)
);
}
Controller
<?php
class UsuariosController extends AppController {
function cadastro(){
if (!empty($this->data)) {
if($this->Usuario->validates()){
$this->set("erro", "1");
}
if ($this->Usuario->save($this->data)) {
//mensagem
$this->Session->setFlash('Cadastro realizado com sucesso!');
//redireciona
$this->redirect(array('action' => 'cadastro_sucesso'));
}
}
}
function cadastro_sucesso(){
}
function login(){
if (!empty($this->data)) {
$this->Usuario->set($this->data);
}
}
}
?>
No cadastro tem varios campos, mas o que tem entre eles em comum são o campo e-mail
No cadastro tem varios campos, mas o que tem entre eles em comum são o campo e-mail
Então nenhum erro foi disparado?
E outra coisa... para que você está fazendo isso aqui? (se for por causa de outro código, poste ele também)
function login(){
if (!empty($this->data)) {
$this->Usuario->set($this->data); // ####### Isso aqui
}
(não se confundiu com apenas $this->set()?)Olá Lucas.
Que é um site aonde o usuário tem um acesso restrito.
Eu fiz a página aonde ele ira cadastrar que tem os campos na view (nome, e-mail, cpf, telefone, data de nascimento, endereço e senha). Essa parte é da action 'cadastro'.
E tera a parte de login, para acessar a área restrita deles.
Nessa parte eu não fiz o resto do código, eu não fiz a parte de autenticação ainda. Tava começando pela validação, depois ia fazer o resto.
Só para confirmar, a validação do cadastro tá tudo certo, como deveria de ser. Já do login, ele também valida, mas ele ta validando o isUnique, então quando entro com o e-mail para logar, ele manda a mensagem que esse e-mail já esta cadastrado.
O problema é que quado você força uma validação sem um parametro para localizar o registro o Cake intende que você vai fazer um create... o que você pode fazer é aceitar usar forçar uma validação só de email no model.
Fala Theodoro.
Cara confesso que não entendi muito bem o que você falou.
Como poderia resolver isso? Teria que criar um model pra cada?
Tem alguma referencia para eu pesquisar e estudar?
Valeu.
Bom... se você não se importa com gambiarras, pode fazer assim:
Retire a validação de email do model e só adicione quando o usuario for cadastrar:
var $validate = array(
'nome' => array(
'notempty'=> array('rule' => 'notempty',
'message' => 'Digite seu nome!')
),
'email' => array(
'notempty'=> array('rule' => 'notempty',
'message' => 'Digite seu e-mail!'),
)
);
Ai no controller/action usuarios/cadastrar você adiciona a validação:
function cadastro(){
$this->Usuario->validate['email'][0]['isUnique'] = array('rule' => 'isUnique',
'message' => 'Essa e-mail já esta cadastrado!',
'on' => 'create'
);
if (!empty($this->data)) {
if($this->Usuario->validates()){
$this->set("erro", "1");
}
if ($this->Usuario->save($this->data)) {
//mensagem
$this->Session->setFlash('Cadastro realizado com sucesso!');
//redireciona
$this->redirect(array('action' => 'cadastro_sucesso'));
}
}
}
Agora é só ajeitar do jeito que você quer...Funcionando é o que importa! ;)rs
Deu certo a validação aqui, mas a mensagem de erro não esta dando certo aparece a mensagem assim '
Error in field Email'.
e no código esta assim:
'message' => 'Essa e-mail já esta cadastrado!'
Hmm.. parece que a hierarquia esta errada. Tente assim:
$this->Usuario->validate['email'][0] = array('rule' => 'isUnique',
'message' => 'Essa e-mail já esta cadastrado!',
'on' => 'create'
);Fala Lucas, desculpe pela demora que precisei dar prioridade para um outro projeto!
valeu de novo!
Bom mas queria ver se você pode me ajudar um pouquinho mais, com a validação direto no controller como você me passou não estou conseguindo colocar dois tipos de validação no mesmo campo exemplo uma validação de 'notEmpty' e 'email'.
Valeu!
Conseguir fazer... valeu
para quem precisar saber como fiz, coloquei assim:
$this->Usuario->validate['senha'] = array( 'notempty'=>array('rule' => 'notEmpty',
'message' => 'digite!'), 'alphanumeric' =>array('rule2' => 'alphaNumeric',
'message' => 'Apenas letra e número!')
);
Mostre como está seu model e o seu controller.