Bonjour,
je suis débutante alors je galère pas mal. J'ai une appli développée avec le framework slim, jusque là ça va.
Voilà ma problématique :
je dois lors de la perte de focus d'un input, faire une requête ajax qui utilise une fonction php (qui vérifie que le nom présent dans l'input n'est pas déjà utilisé).
le fichier twig possède en fin ce script :
qui fait donc appel à la fonction checkNameAuto qui est dans formChecker.js
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <script> document.querySelector('#nom').onfocus = function() { checkNameAuto(); } </script>
** J'aurai besoin d'un coup de main ou au moins d'explication pour faire ma requête ajax, je n'arrive jamais à les monter correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 /** * Permet le controle du nom de l'automate dans l'input */ function checkNameAuto() { // Recupération de l'input id=nom var inputName = document.getElementById('nom'); // On attend que l'input perde le focus inputName.onblur = function (e) { //on récupère la valeur de l'input var name = inputName.value; console.log(name); //on effectue la requête ajax $.ajax({ type: "GET", url: "/administration/table/automates/form/" + name, data: { myFunction: "ckeckNameNotDuplicated", myParams: {nom: name} }, datatype: "html", success: function (data) { // on utiliser la méthode du controller console.log(data); }, error: function () { // en cas de problème alert("problème de connection avec la base de donnée"); } }) }
Donc, j'ai la fonction checkNameAuto qui est dans formChecker.js (voir au dessus)
Qui doit appeler mon Controller qui possède la méthode :
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
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 /** * Controle que le nom de l'automate n'est pas déjà présent dans la table * @param Request $request * @param Response $response * @param $args * @return Response */ public function ckeckNameNotDuplicated(Request $request, Response $response, $args) { // Recherche combien de fois le nom affiché dans le champs est présent dans la base de donnée $doublons = $this->modelAutomates->getCheckNameAutoDoublon($_GET['nom']); // S'il est déjà présent if (count($doublons)>0) { // afficher message d'erreur $message = array(); $message['etat'] = 'ko'; $message['retour'] = "Enregistrement de l'automate échoué - Nom déjà utilisé "; $this->logger->error($message['retour']); // rafraichissement de la page en cas d'erreur // Récupération des données $ordis = $this->modelAutomates->getOrdiListForForm(); $saufAutos = $this->modelAutomates->getAutoListeCanUseFiles(); $paramLibelleIE = $this->modelAutomates->getParamLib(); // Rendu $this->view->render($response, "autoFormAdd.twig", array( "ordis" => $ordis, "libelleIE" => $paramLibelleIE, "autosSauf" => $saufAutos, "message" => $message )); return $response; } // sinon on ne fait rien return $response; }
J'ai également dans routes.php la route suivante
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // Controle de la non duplication du nom de l'automate $this->get('/form/{nom}', 'App\Controller\AdministrationController:ckeckNameNotDuplicated') ->setName('administration-table-automates-check-name');
Et la fonction de recherche dans mon model
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 /** * Vérifie combien il y a d'automate portant ce nom * @param $autoNom * @return mixed */ public function getCheckNameAutoDoublon($autoNom){ $this->bddAutomates->query("SELECT count(auto_nom) FROM automates WHERE auto_nom = :nom"); $this->bddAutomates->bindParam(':nom', $autoNom); return $this->bddAutomates->fetch(); }
L''appli est développée par les stagiaires qui passent (ce n'est pas une critique juste une explication de pourquoi la requête sql se fait dans le model, alors qu'elle devrait être faite dans un repository comme sous symfony).
Comment monter la requête ajax pour qu'elle envoie la valeur de l'input à la méthode du controller (et donc affiche un message si le nom est déjà utilisé).
Le controller utilise lui la requête sql qui est dans le model.
Merci d'avance parce que là, je sèche, j'ai déjà utilisé plein de chose rien ne marche.
Partager