2010-01-07 10 views
0
Troubles

J'ai récemment posted a question about the CakePHP email component, et, avec l'aide de quelques-unes des réponses et des commentaires, a pu résoudre mon problème ...Plus CakePHP Email Component

La chose est, résoudre mon problème de messagerie a révélé un autre problème!

Donc, voici mon problème:

J'ai un contrat qui a un client qui lui est associé. Lorsque je crée un contrat, je sélectionne un client. Je veux envoyer un e-mail au client avec un lien vers le contrat lorsque je sauvegarde le contrat dans la base de données. Cependant, lorsque je sauvegarde le contrat, aucun e-mail n'est envoyé! Je sais que l'email fonctionne. Si je code réellement toutes les variables, tout fonctionne. Mais lorsque j'essaie de récupérer dynamiquement des informations sur le client dans la base de données, cela ne fonctionne pas.

J'ai vu une solution qui impliquait getByLastId(), mais je ne pense pas que cela fonctionnera dans ce cas, car je n'ai pas besoin du dernier utilisateur ajouté ... J'ai besoin de l'utilisateur qui est attaché à ce contrat.

J'espère que j'explique bien ceci.

Voici le code que je pense pertinent ... si vous avez besoin de plus d'informations, faites le moi savoir et je l'afficherai.

Voici le code dans mon contracts_controller.php pour mon email fonction d'envoi:

function _sendContractEmail($id) { 
    $this->Email->smtpOptions = array(
    'port'=>'587', 
    'timeout'=>'30', 
    'host'=>'smtp.email.com', 
    'username'=>'username', 
    'password'=>'password' 
    ); 
    $User = $this->Contract->User->read(null,$id); 
    $this->Email->delivery = 'smtp'; 
    $this->Email->to = $User['User']['email']; 
    $this->Email->subject = 'New Contract from Company'; 
    $this->Email->replyTo = '[email protected]'; 
    $this->Email->from = '[email protected]'; 
    $this->Email->template = 'default'; 
    $this->Email->sendAs = 'html'; 
    $this->set('User', $User); 
    $this->Email->send('Test'); 
    $this->set('smtp-errors', $this->Email->smtpError); 
} 

Et voici le code dans mon contracts_controller.php pour la fonction add():

function add() { 
    if (!empty($this->data)) { 
    $this->Contract->create(); 
    if ($this->Contract->save($this->data)) { 
    $this->Session->setFlash(__('The Contract has been saved', true)); 
    $this->_sendContractEmail($this->Contract->User->id); 
    } else { 
    $this->Session->setFlash(__('The Contract could not be saved. Please, try again.', true)); 
    } 
    } 

Toute aide serait grandement appréciée!

Merci,

Jérémie

+0

Cela ressemble au premier coup d'œil comme cela fonctionnera. Quel résultat obtenez-vous? Des erreurs de Email :: smtpError? Avez-vous les informations de connexion correctes pour l'installation SMTP quelque part? Est-ce que $ this-> Contract-> User-> id est correctement défini? À quoi ressemble votre $ Utilisateur? –

+0

En fait, je suis relativement nouveau à PHP ... comment verrais-je à quoi $ User ressemble? Je suppose que je pourrais utiliser le débogage ($ User); mais où pourrais-je mettre cela? Et, je ne me suis pas rendu compte que j'avais besoin de mettre $ this-> Contract-> User-> id, car c'est un paramètre. En ce qui concerne le SMTP, je sais que tout fonctionne parfaitement ... parce que quand je change $ this-> Email-> à = "[email protected]", je reçois l'email.C'est quand j'essaie de le récupérer sur $ User ['User'] ['email'] qu'il arrête de fonctionner. C'est pourquoi je pense que le problème n'est pas les paramètres SMTP. – Jeremiah

Répondre

0

Utilisez findBy<fieldName>(string $value) ($ this-> Contact-> Utilisateur-> findById ($ id))

http://book.cakephp.org/view/451/findBy

Cette méthode peut renvoyer plusieurs valeurs afin utilisez pr ($ User) pour voir le format du tableau. Vous devriez pouvoir trouver les détails de l'utilisateur dans $ User [0] ['User'] ['email'].

0

je vais poster ce commentaire parce que je ne sais pas si cela va fonctionner, mais je n'ai pas assez réputation de faire des commentaires encore: p

Avez-vous essayé?

var $uses = array('User'); 
$user = $this->User->read(null,$id); 

ou

$user = $this->User->findById($id)