Bonjour bonjour !

Je suis en train de suivre le tuto sur les zones membre et lors de la validation pour mail, j'ai un petit soucis.

Donc, voici l'action du controller :

function signup(){
    if($this->request->is("post")){
      $d = $this->request->data;
      $d"User"]"id"] = null;
      if(!empty($d"User"]"password"])){
        $d"User"]"password"] = Security::hash($d"User"]"password"]);
      }
      if($this->User->save($d,true,array("username","password","mail"))){
        $link = array("controller"=>"users","action"=>"activate",$d"User"]"username"]."-".md5($d"User"]"password"]));
        App::uses("CakeEmail","Network/Email");
        $mail = new CakeEmail();
        $mail->from("no-reply@studart.be")
             ->to($d"User"]"mail"])
             ->subject("Votre inscription sur StudArt")
             ->emailFormat("html")
             ->template("signup")
             ->viewVars(array("username"=>$d"User"]"username"],"link"=>$link))
             ->send();
        $this->Session->setFlash("Votre compt a bien été créé","notif",array("type" => "alert-success"));
      }else{
        $this->Session->setFlash("Il y a des erreurs dans le formualaire","notif",array("type" => "alert-error"));
      }
    }
  }

Et le formulaire :

<?php
      echo $this->Form->create("User",array("class" => "form-horizontal"));
        echo $this->Form->input("username",array(
          "div" => "control-group",
          "label" => array(
            "class" => "control-label",
            "text" => "Login : "
          ),
          "between" => "<div class='controls'>",
          "after" => "</div>"
        ));
        echo $this->Form->input("mail",array(
          "div" => "control-group",
          "label" => array(
            "class" => "control-label",
            "text" => "Email : "
          ),
          "between" => "<div class='controls'>",
          "after" => "</div>"
        ));
        echo $this->Form->input("password",array(
          "div" => "control-group",
          "label" => array(
            "class" => "control-label",
            "text" => "Mot de passe : "
          ),
          "between" => "<div class='controls'>",
          "after" => "</div>"
        ));
    ?>
    <div class="controls">
      <?php
        echo $this->Form->end(
          array(
            "label" => "S'enregistrer",
            "class" => "btn"
          )
        );
      ?>
    </div>

Et voici l'erreur que j'ai (enfin, LES erreurs si on compte la notice) :

Voilà, merci d'avance pour celui ou ceux qui m'aideront :)

2 réponses


Axiol
Auteur
Réponse acceptée

Bonjour bonjour,

Merci de ta réponse, mais ce n'était pas ça. J'ai trouvé en fouillant la doc et SO. En fait, apparemment depuis une des dernière mise-à-jour, il faut tout le temps préciser la config à utiliser pour CakeEmail, même si on en a qu'une d'enregistrée, ce qui n'est pas des plus claire dans la doc...

Et donc, simplement mettre :

$mail = new CakeEmail("default");

Résout le problème.

Bonjour,

Je pense que ton tableau "$d" ne contient pas de valeur pour "$d'User']'mail']" (la première notice), ce qui fait que Cake considère ça comme un "null".
Ainsi l'appel à CakeEmail::to ne renvoie pas une instance de CakeEmail (permettant le chainage des appels), mais la valeur actuelle de "to". C'est ce qui genère l'erreur suivante.

Vérifie donc le contenu de $d et tout devrait rentrer dans l'ordre.