Enfaite, j’ai un model Person, j’ai son nom, prenom, date de naissance , …
Je veux dans la création du nouvelle personne (create person), dès que je rempli l’un des champs (nom, prenom, … ou date de naissance), l’outil de la création de la personne sera lancer via ajax, sans le clique sur save.
si je comprends bien, aussitôt que l’utilisateur saisi un des champs (nom, ou prénom, ou date de naissance), une requête ajax doit être faites pour insérer une nouvelle ligne dans la table des utilisateurs (à priori ‘User’). C’est ça ?
Quel est l’évènement qui déclenche la requête ajax ? Est-ce lorsque le contrôle “nom” (par exemple) perd le focus ?
Comment comptes-tu gérer les règles de validation dans ce cas ? … que se passe-t-il si je saisi une date de naissance et qu’après je quitte le site ? tu as un enregistrement incomplet dans ta base de données … et pour les noms en double ?
Je dois avouer que je trouve que ce mode de fonctionnement est très … comment dire … “étrange” ? …“bizarre” ? … ne connaissant pas les spécifications qui t’obligent à réaliser un tel mécanisme, je le trouve très contraignant, bien peu pratique et source de nombreux problèmes.
Oui je suis tout à fait d’accord avec toi, mais pour l’appli que j’essai de faire j’ai ce besoin.
Quel est l’évènement qui déclenche la requête ajax ? Est-ce lorsque le contrôle “nom” (par exemple) perd le focus ? ==> Après le premier onchange.
Dans mon application, j’ai modifié la redirection de l’action “Create” vers la vue “Update”, donc dès que l’item sera créer je serai dans la vue Update.
Pour la validation aucun champs est obligatoire (pour simplifier le formulaire)
Je pense que tu pourrais utiliser les formulaires de type activeForm.
Il y a la propriété enebaleAjaxValidation qui permet de valider le formulaire en Ajax. Dans ton cas, tu pourrais valider les donner et les enregistrer.
Il est possible pour chaque élément du formulaire de faire oui ou non un appel ajax si la valeur de ce dernier change.
Pourquoi ne pas modifier l’action create du controller pour qu’elle créer un model vierge, l’enregistre, prenne l’id de ce nouveau model et redirige vers l’action Update en utilisant cet id.
Faudra ensuite faire un tri au niveau de la sauvegarde ( CACtiveRecord::beforeSave() ) pour ne pas enregistrer les models vide (sauf lors de la creation dans l’action Create) (en utilisant la variable scenario)
Sinon, pourquoi ne pas bricoler avec CActiveForm->clientOptions afterValidateAttribute … Pour ma part, je prefèrerai l’option 1 plutot que de gerer ça en js …