bonsoir,
je suis en train de suivre le tutoriel de cakephp pour le tp2.
j'ai un drôle de problème avec le formulaire d'enregistrement.
mon formulaire est bien validé (le message flash de confirmation d'enregistrement s'affiche correctement), mais j'ai un message d'erreur qui s'affiche sur le nom, alors que je n'entre que des lettres...
ça fait 3/4 d'heure que je cherche, mais tout me semble bon.
j'utilise la version 243 de cakephp.
le formlaire
<div class="row">
<div class="span12">
<?= $this->Form->create('User');?>
<?= $this->Form->input('username', array('label' => "Nom d'utilisateur"));?>
<?= $this->Form->input('password', array('label' => 'Mot de passe'));?>
<?= $this->Form->input('password2', array('type' => 'password', 'label' => 'Confirmer le mot de passe'));?>
<?= $this->Form->input('mail', array('label' => 'Adresse mail'));?>
<?= $this->Form->end('S\'inscrire');?>
</div>
</div>
le modele
<?php
class User extends AppModel{
public $validate = array(
'username' => array(
'nom' => array(
'rule' => '/^[a-zA-Z0-9]*$/',
'message' => 'Votre nom d\'utilisateur n\'est pas valide'
)
),
'mail' => array(
'rule' => 'email',
'message' => 'Vous devez saisir une adresse mail valide'
),
'password' => array(
'rule' => 'notEmpty'
),
'password2' => array(
'rule' => 'identicalFields'
)
);
public function identicalFields($check, $limit){
return $check'password2'] == $this->data'User']'password'];
}
}
mon controller
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController{
public function beforeFilter(){
parent::beforeFilter();
$this->Auth->allow('signup', 'login');
}
public function signup(){
if(!empty($this->request->data)){
$this->User->create($this->request->data);
if($this->User->validates()){
$this->User->create(array(
'username' => $this->request->data'User']'username'],
'password' => $this->Auth->password($this->request->data'User']'username']),
'username' => $this->request->data'User']'mail']
));
$this->User->save();
$this->Session->setFlash('Merci de vous êtes inscrit');
}
}
}
}
ma base psql
drop table if exists users;
create table users(
id serial primary key,
username varchar(255),
mail varchar(255),
password varchar(255),
active integer default 0,
token varchar(255)
);
le message flash s'affiche bien, mais les données saisies ne sont enregistrées dans la base.
je ne comprends vraiment pas :(
c'est bon, j'avais fait de la merde dans mon controller, il fallait mettre :
$this->User->create(array(
'username' => $this->request->data'User']'username'],
'password' => $this->Auth->password($this->request->data'User']'password']),
'mail' => $this->request->data'User']'mail']
));