Bonjour tout le monde,
C’est après moult essais que je rends les armes, et je viens me tourner vers la communauté de Grafikart afin de résoudre mon problème de validation d’email dans cake :
Voici la descrption de la situation :
Je possède un formulaire d’envoi de devis et je souhaite valider certains champs.
Losque tous les champs sont correctement remplis, le mail part c’est génial, pas de souci, là où cela se corse dans mon c’est lorsque le champ email est mal rempli :

Dans le cas où je tape : « monmail »
la validation fonctionne, formulaire n’est pas envoyé une info bulle apparaît m’indiquant de rajouter le symbole @

Dans le cas où je tape :
« monmail@mondomaine » : la validation ne fonctionne pas, le formulaire est envoyé, sans se rendre compte qu’il manque le suffixe de l’adresse mail : .fr ou . com
Le message suivant apparait :
Invalid email: " monmail@mondomaine "
Error: An Internal Error Has Occurred.

Dans le cas où je désactive la validation du champ email dans le modèle, et que j’envoie un champ vide par exemple, le formulaire est envoyé, et j’obtien le même type de message que le cas précédent
Le message suivant apparait :
Invalid email: " "
Error: An Internal Error Has Occurred.

Voici les codes de mes différents fichiers:

Contact.php

App::uses('AppModel', 'Model');
class Contact extends AppModel {
    public $name = 'Contact';   
    public $useTable = false;
    public $validate = array(
        'nom' => array( 
            'allowEmpty' => false,
            'required' => true,
            'message' => 'Merci de rentrer un nom'
        ),
        'prenom' => array( 
            'allowEmpty' => false,
            'required' => true,
            'message' => 'Merci de rentrer un prénom'
        ),
        'telephone' => array( 
            'allowEmpty' => false,
            'required' => true, 
        ),
        'message' => array(
            'allowEmpty' => false,
            'required' => true 
        ) ,
        'email' => array(
            'rule'=>'email'
        )         

    );

    public function send($d){

            App::uses('CakeEmail', 'Network/Email');
            $email = new CakeEmail('smtp');
            $email->to('moi@monmail.fr'); //j'ai changer 
            $email->replyTo($d'email']);
            $email->subject('Message du FORMULAIRE de DEVIS');
            $email->viewVars(array(
                'nom' =>$d'nom'] ,
                'prenom' =>$d'prenom'] ,
                'email' =>$d'email'],
                'phone' =>$d'phone'],
                'entreprise' =>$d'entreprise'],
                'nature' =>$d'nature'] ,
                'delais' =>$d'delais'] ,
                'message' =>$d'message']
                ));
            $email->template( 'default');
            $email->emailFormat('both');
            return $email->send();
    }/* END function send*/

}/* END class PageInformation */

ContactsController.php

<?php 
class ContactsController extends AppController {

    public $uses = array('Contact');
    public $helpers = array('Html', 'Form');
    function beforeFilter(){
        parent::beforeFilter();
        $this->Auth->allow('index');
    }    
    public function index() {
        $this->layout = 'frontend-page-contact';
        $menu_item = 'contact';
        $title_for_layout = 'Titre page d accueil';
        $this->set(compact('menu_item','title_for_layout'));

        if ($this->request->is('post')) 
        { 

                  $formcontact = $this->request->data('Contact']); 
                  if ( !empty($formcontact) )
                  {
                $this->Contact->send($this->request->data('Contact']));
                    $this->Session->setFlash('Votre Message a bien été envoyé.','default', array('class' => 'msg--success--mail cf'));   
                  }
                }

    }/*END function index()*/

}/* END class ContactsController */
?>

Contacts/index.ctp

<?php echo $this->Form->create('Contact', array('role' => 'form','class'=>'formulaire--devis','id'=>'formulaire--devis'));?>    

        <?php
             echo $this->Form->input('courriel', array(
             'label' => 'Email',
             'placeholder' => 'ici votre e-mail'
            ));
         ?>     

    <?php
    $options = array(
    'class' => 'button button--devis--form success round',
    'label' => 'ENVOYER',
     );
    echo $this->Form->end($options);
     ?>

J’ai regardé pas mal de sujet, je pense que la solution, se trouve du côté du controller, en rajoutant peu être une condition du genre :

if ($this->Contact->validates())

Mais je n’ai pas tout compris au validate dans le controller, du coup je m’en remets à votre aide,
Obione Kenobi vous êtes mon seul espoir… non ça c’est autre chose. ? À bientôt

2 réponses


ker0x
Réponse acceptée

Il faut bien utiliser la fonction validates() dans ton Controller

if ($this->request->is('post')) {
    if (!empty($this->request->data'Contact'])) {
        $this->Contact->set($this->request->data'Contact']); // Passe les données au model
        if ($this->Contact->validates()) {
            $this->Contact->send($this->request->data('Contact']));
            $this->Session->setFlash('Votre Message a bien été envoyé.','default', array('class' => 'msg--success--mail cf'));
            $this->request->data = array(); // Vide le request->data pour ne rien afficher dans les inputs
        }
        $this->Session->setFlash('Erreur.', 'default', array('class' => 'msg--error--mail cf'));
    }
}
Rastaf86
Auteur

Merci beaucoup gyzmo, c'est la solution !