Salut à tous !!

J'ai encore une paire d'erreur coriace et que je n'arrive pas à m'expliquer...

Je suis en train de créer un formulaire de contact des plus simple... Nom, email, sujet, message et mise en copie ou non de l'expéditeur (checkbox). Jusqu'à là, tout va très bien !
Mais tout se complique au moment où j'essaie de faire passer du contenu dans la fonction subject() de CakeEmail qui me renvoie une erreur ainsi :

Fatal error: Call to a member function subject() on a non-object in /Users/Sko/Documents/05-associations/02-4zarts/Site/app/Model/Contact.php on line 32

De même à partir du moment où je mets des règle de validation, je reçois cette erreur :

Warning (2): preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash [CORE/Cake/Model/Model.php, line 2987]

et la gestion des erreur est tout à fait bizarre car le message n'est pas affiché mais il s'affiche à la place "required".

Autre chose bizarre, quelque soit mon action si je debug($this->validates()); j'obtiens true(1) alors que je devrais obtenir false(0)...

Je vous mets mon model Contact.php

<?php
class Contact extends AppModel{

    public $useTable = false; // On déclare que cet ensemble Contact n'utilise pas de bdd
    public $validate = array( // Règles de validation
        'name' => array(
            'rules' => 'notEmpty', 
            'required' => true, 
            'message' => 'Vous devez entrer votre nom')
        //'email' => array('rules'=>'email', 'required'=>true, 'message'=>'Votre e-mail doit être valide'),
        //'subject' => array('required'=>true, 'message'=>'Veuillez saisir un sujet'),
        //'message' => array('required'=>true, 'message'=>'Vous devez entrer un message')
    );
    public function send($d){ // Fonction gérant les conditions d'envoi du formulaire de contact

            debug($this->validates());
            debug($d);
        $this->set($d); // On envoie à la vue les données

        if($this->validates()){
            App::uses('CakeEmail', 'Network/Email'); // On déclare la class que l'on utilise pour envoyer un email
            $mail = new CakeEmail(); // On crée un nouvel e-mail
            if($d'copy']) {$copy = $d'copy'];}
            else {$copy = null;}
            $mail ->to('skodnl@hotmail.com')
                    ->from('skodnl@hotmail.com')
                    ->cc($copy)
                    ->subject('[WebSite 4ZA] -'.$d'subject'])
                    ->emailFormat('html')
                    ->template('contact') // Nom du template d'e-mail utilisé
                    ->viewVars($d); // les données dont à besoin le template pour s'exécuter (possiblement écrit ainsi viewVars('name','content'); )
            // return true (1) si le mail s'est bien envoyé sinon false (0) 
            // $mail->send() doit prendre du contenu dans le cas ou il n'y a pas de template utilisé.
            return $mail->send(); 
        }else{
            return false;
        }       
    } // Fin de la function send()
} // Fin du model Contact

le ContactController.php

<?php
class ContactController extends AppController{

    function index(){

        if($this->request->is('post')){
            $this->Contact->send($this->request->data'Contact']); // On envoie les données de la requête Contact pour éviter d'avoir l'index Contact
        }
    }   
}

Et voici un sreenshot de smilblick ...

J'ai vraiment besoin de votre aide, svp !!
Sko.

4 réponses


Grafikart
Réponse acceptée

rules => rule

sko
Auteur

oooh le boulet que je suis !! Merci !

As-tu une idée pour ce problème ?? J'ai cette erreur pour subject(), emailFormat() etc.

Fatal error: Call to a member function emailFormat() on a non-object in /Users/Sko/Documents/05-associations/02-4zarts/Site/app/Model/Contact.php on line 31
sko
Auteur

J'ai trouvé mon erreur ! C'est parce que j'envoyais pas un email dans le cc() (j'avais mis $copy = $d'copy'] au lieu de $d'email'], ce qui retournait 1 et donnait une erreur de format d'email pour cake) et faisait planter tout le reste !

sko
Auteur

En réalité, j'ai encore un problème avec le cc()...
Dans le cas où je ne veux que me soit envoyer un copie... le cc() a pour valeur null ce qui provoque une belle erreur de "Invalid email".
Pourtant dans la doc il est précisé que le cc() peut être null.
j'ai donc tenté d'introduire seulement le cc quand il est demandé dans le $mail... mais je n'arrive pas à l'insérer sans casser l'enchainement...

Il est pas non plus possible de réécrire l'array de CakeEmail :( ni d'utiliser soi même la fonction _setmail()...

Comment est-il possible de contourner ce problème ?