Bonjour à tous,
J'essaie actuellement de faire de la validation cakePHP via mon controller sur un formulaire généré en AJAX.
Le problème est qu'aucun message n'est affiché, la page retourne un message vide.
productsControllers.php
$this->autoRender = false;
if ($this->request->is('ajax')) {
$validator = new Validator();
$validator
//Validation de la demande d'offre
->notEmpty('company', __('Veuillez entrer votre société.'))
->notEmpty('name', __('Veuillez entrer votre nom.'))
->notEmpty('address', __('Veuillez entrer votre adresse.'))
->notEmpty('npa-city', __('Veuillez entrer votre npa et votre ville.'))
->notEmpty('phone', __('Veuillez entrer votre numéro de téléphone.'))
->notEmpty('comments', __('N\'oubliez pas votre commentaire'));
$errors = $validator->errors($this->request->data());
//Vérifie si il y a des erreurs
if (!empty($errors)) {
//Si il y a des erreurs, on les envoie
$this->Flash->success(__("Une erreur s'est produite."));
//return $this->redirect(['controller' => 'users', 'action' => 'login']);
} else {
$message = "";
$message .= __("Nom : ") . $this->request->data['contacts-name'] . "\r\n";
$message .= __("Adresse email : ") . $this->request->data['contacts-email'] . "\r\n";
$message .= __("Message : ") . "\r\n" . $this->request->data['contacts-message'] . "\r\n";
$email = new Email('default');
$email->from(['lemaildemonsite'])
->to('monemailàmoi')
//->to(Configure::read('Config.fromContact'))
->subject('Demande d\'offre')
->send(__("Contact depuismonsite") . "\r\n" . $message);
$this->Flash->set('Votre message a été envoyé. Nous allons vous répondre au plus vite.', [
'element' => 'Admin/alerts',
'params' => [
'type' => "success",
'icon' => "check",
],
]);
return $this->redirect($this->referer());
}
}
}
Est-ce que vous auriez une solution ? Je m'y connais vraiment peu en AJAX, la page a été créée par un collègue je dois simplement faire la validation et l'envoi d'email par cakePHP mais ces messages vides me bloquent totalement.
Merci d'avance
Bonjour.
Il y a certaines choses qui ne vont pas.
Pour commencer, que fait tes règles de validations dans ton controller alors qu'elles devraient être dans ton model de Table ?
Ensuite, il n'y a ni message flash, ni redirect dans de l'ajax.
Salut Lartak,
En effet, j'ai maintenant mis la validation sur mon model, je ne connais pas encore tout ce qui est convention de Cakephp...
J'ai néanmoins réussi à faire ma validation, je doute très fortement que cela soit le plus optimisé possible, mais le résultat y est.
Une idée de comment mieux faire ?
//Vérifie si il y a des erreurs
if (!empty($errors)) {
$messages = "";
foreach ($errors as $k => $v) {
foreach ($v as $kk => $vv) {
if ($messages == "") {
$messages .= $vv;
}
}
}
echo $messages;
} else {
$message = "";
$message .= __("Nom : ") . $this->request->data['name'] . "\r\n";
$message .= __("Adresse : ") . $this->request->data['address'] . "\r\n";
$message .= __("NPA / Ville") . $this->request->data['npa_city'] . "\r\n";
$message .= __("Numéro de téléphone : ") . $this->request->data['phone'] . "\r\n";
$message .= __("Message : ") . "\r\n" . $this->request->data['comments'] . "\r\n";
$email = new Email('default');
$email->from(['emaildusite'])
->to('monemail')
//->to(Configure::read('Config.fromContact'))
->subject('Demande d\'offre')
->send(__("Contact du site de moi") . "\r\n" . $message);
$this->Flash->set('Votre message a été envoyé. Nous allons vous répondre au plus vite.', [
'element' => 'Admin/alerts',
'params' => [
'type' => "success",
'icon' => "check",
],
]);
echo __("Votre demande a bien été reçue.");
Cela m'affiche mes messages d'erreur 1 à 1 et lorsque j'envoie mon mail cela m'affiche correctement ce que je veux.
Dis moi, à quoi ça te sert de vérifier si la variable $messages
est vide dans le code suivant, alors que tu lui défini la variable vide juste avant ?
$messages = ""; // Ici tu l'as vide
foreach ($errors as $k => $v) {
foreach ($v as $kk => $vv) {
if ($messages == "") { // Et la tu vérifies si elle est vide ...
$messages .= $vv;
}
}
}
Et pourquoi est-ce qu'il y a encore une définition de message Flash ?