覆盖默认的laravel邮件事件类

时间:2018-03-27 15:32:40

标签: php laravel laravel-5.3

我正在尝试使用laravel mail events触发已发送的电子邮件,我在 EventServiceProvider.php 中注册了我的活动:

'Illuminate\Mail\Events\MessageSending' => [ 'App\Listeners\CopyEmailIntoSentFolder', ],

CopyEmailIntoSentFolder.php

class CopyEmailIntoSentFolder
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MessageSending  $event
     * @return void
     */
    public function handle(MessageSending $event)
    {
        //
    }
}

有没有办法覆盖 MessageSending.php 类?我需要在我的活动中添加其他数据并 MessageSending.php only stores swift_Message

1 个答案:

答案 0 :(得分:0)

您应该只需在对象上插入新属性即可。

查看实际操作:https://ideone.com/PsxiLb

class Foo {
    public $message = 'none';

    public function __construct($message) {
        $this->message = $message;
    }
}

$foo = new Foo('hello');
$foo->bar = new Foo('bar');

var_dump($foo);

输出:

object(Foo)#1 (2) {
  ["message"]=>
  string(5) "hello"
  ["bar"]=>
  object(Foo)#2 (1) {
    ["message"]=>
    string(3) "bar"
  }
}

如您所见,在填充了新Foo对象的Foo对象上创建了属性栏。

只要该属性不存在,您就可以在该对象上创建一个新属性,它将被传递给它传递给的其他对象。

您必须测试事件对象是否无法恢复,直到它到达您的控制器,但发生这种情况的可能性很小。