FOSuserbundle, validation ajax
Bonjour à tous,
Je suis en train de faire mon premier projet symfony2 et je souhaiterais savoir dans quelle direction partir pour valider mon formulaire avec ajax (et jquery).
En gros voici mon idée pour valider le champs mail par exemple:
1) lorsque utilisateur quitte le champs -> appel ajax vers le controller fosuser registration
2) demander si l'email est valide (si il existe déjà) ?
3) réponse JSON
Du côté ajax j'ai pas trop de problèmes.
Je souhaiterais surtout savoir quel controller appeler ou quel méthode appeler?
Je sais que je peux remplacer le controller RegistrationController du bundle mais je suis pas sûr que ça soit la bonne démarche.
Si quelqu'un peut me donner une idée c'est avec plaisir.
Merci beaucoup, bon week-end à tous.
requête ajax retourne le template twig entier
Bonjour à tous,
J'ai continuer à travailler la dessus, j'arrive bien à faire une requête ajax, mais je ne sais malheureusement pas comment fait un appel sur la fonction du bundle fosuser qui valide le champs mail:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
function is_field_valid(){
alert("fonction run");
var data = {
'fos_user_registration_form_[username]' : $("#fos_user_registration_form_email").val()
};
$.ajax({
type: "POST",
url: '/jlfa/web/app_dev.php/register/', // rend le template complet
asyn:false,
data: data,
dataType: "json",
success: function(res) {
alert(res);
}
});
} |
ça fonctionne mais est-ce qu'est correct :)
Bonjour à tous,
J'ai trouvé une solution qui à l'air de marché et je souhaiterais avoir votre avis si c'est pas trop barbare :)
Comme j'ai pas trouvé d'exemple j'ai essayé de faire ça le plus proprement possible avec mes connaissance faible du framework symfony2:
1) appel ajax vers un controller "maison"
2) check si l'email est valide
3) retour en json
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
class RegistrationController extends BaseController {
function isMailValidAction(){
$request = $this->container->get('request');
$my_mail = $request->get('mail');
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setEmail($my_mail);
$errors = $this->container->get('validator')->validate($user);
$data = null;
if (count($errors) > 0) {
$data = $errors[0]->getMessage();
}
return new JsonResponse($data);
}
} |
Sur mon user j'ajoute la contrainte UniqueEntity("email")
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
/**
* @ORM\Entity
* @UniqueEntity("email")
* @UniqueEntity("username")
* @ORM\Table(name="tut_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="boolean")
*/
protected $displayMail;
/**
* @ORM\Column(type="string", length=255)
*/
protected $aboutMe;
/**
* @ORM\Column(type="string", length=255)
*/
protected $adresse;
/**
* @ORM\Column(type="boolean")
*/
protected $displayAdresse;
/**
* @ORM\Column(type="string", length=255)
*/
protected $formateAdresse;
/**
* @ORM\Column(type="decimal")
*/
protected $lat;
/**
* @ORM\Column(type="decimal")
*/
protected $lng;
public function __construct(){
parent::__construct();
}
public function getDisplayMail(){
return $this->displayMail;
}
public function setDisplayMail($displayMail){
$this->displayMail = $displayMail;
}
public function getAboutMe(){
return $this->aboutMe;
}
public function setAboutMe($aboutMe){
$this->aboutMe = $aboutMe;
}
public function getAdresse(){
return $this->adresse;
}
public function setAdresse($adresse){
$this->adresse = $adresse;
}
public function getDisplayAdresse(){
return $this->displayAdresse;
}
public function setDisplayAdresse($displayAdresse){
$this->displayAdresse = $displayAdresse;
}
public function getFormateAdresse(){
return $this->formateAdresse;
}
public function setFormateAdresse($formateAdresse){
$this->formateAdresse = $formateAdresse;
}
public function getLat(){
return $this->lat;
}
public function setLat($lat){
$this->lat = $lat;
}
public function getLng(){
return $this->lng;
}
public function setLng($lng){
$this->lng = $lng;
}
} |
Appel ajax
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
function is_field_valid(){
var data = {
mail : $("#fos_user_registration_form_email").val()
};
$.ajax({
type: "GET",
url: '/jlfa/web/app_dev.php/check-mail',
asyn:false,
data: data,
dataType: "json",
success: function(res) {
console.log(res); // affiche mail déjà utilisé
}
});
} |