0

我正在使用 CakePHP 3.4

我有一张contact_messages表格可以通过网站上的表格保存消息。

每当保存新消息时,我想向用户发送电子邮件。

为此,我创建了类似的邮件程序类

<?php
namespace App\Mailer;

use Cake\Mailer\Mailer;
use Cake\Event\Event;
use Cake\Datasource\EntityInterface;

class ContactMessageMailer extends Mailer
{
    public function newMessage($message)
    {
        $this
            ->setProfile('no-reply')
            ->setTemplate('new_message')
            ->setLayout('message')
            ->setEmailFormat('html')
            ->setTo($user->email)          // user email
            ->setSubject('Verify Account')
            ->setViewVars(['name' => $user->first_name, 'email' => $user->email, 'message' => $message->body]);
    }

    public function implementedEvents()
    {
        return [
            'Model.afterSave' => 'alertMessage'
        ];
    }

    public function alertMessage(Event $event, EntityInterface $entity, \ArrayObject $options)
    {
        if ($entity->isNew()) {
            $this->send('newMessage', [$entity]);
        }
    }
}

并在ContactMessagesTable.php

$mailer = new UserMailer(); //use App\Mailer\UserMailer;
$this->eventManager()->on($mailer);

ContactMessagesbelongsToUsers并且Users正在拥有要发送电子邮件的用户的电子邮件。

如何users在 Mailer 中获取信息?

4

1 回答 1

0

可能会这样做;在用户表中;

public function processUser($user) 
{
  if($this->save($user)){
     $event = new Event('Model.afterSave', $this, [$entity = $user])
     $this->eventManager()->dispatch($event);
     return true;
  }else{
      return false;
   }
}

在 ContactMessage 表中;

public function initialize()
{
parent::intialize();
$mailer = new UserMailer(); //use App\Mailer\UserMailer;
$this->Users->eventManager()->on($mailer); //ContactMessage has to be related to User table
}

希望我能交流。

于 2017-06-25T23:42:16.803 回答