覆盖供应商包类中的2个函数

时间:2018-06-14 16:02:40

标签: php laravel-5

我正在尝试使用Laravel(5.6)Mail类时检索SMTP队列ID。

我已将文件vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php复制到/app/OverriddenAbstractSmtpTransport.php并在alias中设置config/app.php,进行了更改:

1: 在line#395上我在行前添加了return,因此我们获得了输出

2: line#492已替换为$message->queue_ids[] = $this->streamMessage($message);

所以我可以从queue_ids - 事件

中的message属性访问Illuminate\Mail\Events\MessageSent

现在这样可行,但我不认为这是一种非常安全的方法来修改供应商类,因为它可能会在运行安全更新时导致重大变化。

对此有更简单/更好/更安全的解决方案吗?

1 个答案:

答案 0 :(得分:2)

复制整个课程有风险 - 如果在较新版本中对供应商类别进行了任何更新,他们将永远不会将其复制到您的副本中。 更安全方式是扩展原始类并覆盖这两个函数。在供应商类中对这些功能进行了一些风险,但现在它要低得多。另一种选择是扩展原始类并添加新方法 - 它们可以访问原始类的所有公共和受保护属性/方法,这足以满足您的需要。

无论您选择哪种版本,您都需要稍后将新类注册为Swift的新驱动程序/传输。请查看以下代码段以获取示例:https://gist.github.com/maxwellimpact/46ded5c553f68946d13d