【问题标题】:Override default laravel mail event class覆盖默认的 laravel 邮件事件类
【发布时间】:2018-03-27 23:48:03
【问题描述】:

我正在尝试使用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

【问题讨论】:

  • 出于对理智的热爱,您的班级名称以大写字母开头。属性以小写字母开头。是什么阻止您触发自己的事件并收听它? laravel.com/docs/5.3/events
  • @Tschallacka 因为如果我创建了自己的事件,我需要更改项目中的每个控制器以添加我自己的事件。
  • 你在运行 php 7 吗?
  • @Tschallacka 5.6
  • 我建议你切换到 php7。 Php5.6 已列入“仅安全更新”候选名单,并将在今年年底进入墓地secure.php.net/supported-versions.php

标签: php laravel laravel-5.3


【解决方案1】:

您应该能够在对象上插入一个新属性。

查看实际操作: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 对象。

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

您必须测试事件对象在到达您的控制器之前是否不会恢复,但发生这种情况的可能性很小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多