Laravel Password :: broker()在哪里,它做了什么?

时间:2016-10-04 15:03:43

标签: php laravel

Laravel密码正面中的broker()方法在哪里?我试图理解代码的作用,但我似乎无法在任何文件中找到该方法。

我希望将当前的电子邮件系统更改为PHPMailer,因为内置的Mail类不起作用,似乎没有提供有关它尝试做什么的任何反馈。 Mail类由SendsPasswordResetEmails.php中的sendResetLinkEmail()方法使用

2 个答案:

答案 0 :(得分:2)

这并不能完全回答你的问题,但我认为最终,这将是你所需要的。修改Laravel代码是非常糟糕的做法,因此它使用PHPMailer而不是默认的邮件系统,因为那时你永远无法更新Laravel,因为你的更改可能会被覆盖。更好的做法是告诉Laravel在需要邮件时使用PHPMailer而不是SwiftMailer。这样,所有Laravel代码都保持不变。

在深入研究并尝试弄清楚如何用PHPMailer替换SwiftMailer之前,我会试着找出为什么SwiftMailer不适合你,因为它可能会让很多工作让PHPMailer正常使用Laravel。此外,无论出于何种原因,SwiftMailer都无法正常工作,它也可能导致PHPMailer无法工作,因此在这种情况下,这将浪费时间。

快速浏览文档,看起来PHPMailer使用SMTP,幸运的是,SwiftMailer有一个SMTP驱动程序。因此,请确保在config/mail.php中正确设置了所有设置。使用smtp驱动程序(我认为是默认设置),确保正确设置主机和端口等...

如果仍然无法使其正常工作并确定您需要切换到PHPMailer,那么您可能需要先做一些工作。编写所有代码的SO答案太多了(也许它应该在github上得到自己的项目),但我会尝试详细说明需要采取的步骤。

首先,你应该深入研究Illuminate\Mail\Mailer。您将需要创建一个类似于此的新类。它需要实施MailerContractMailQueueContract。当你这样做时我会用Illuminate\Mail\Mailer作为指导,这就是你在Illuminate\Mail\Mailer使用SwiftMailer的地方使用PHPMailer的地方。我认为很多这些功能,你可能根本不需要改变而只是复制。

然后,您需要创建一个新的服务提供商,该服务提供商会使用密钥Mailer将您刚创建的自定义mailer类绑定到应用。执行此操作时,再次使用Illuminate\Mail\MailServiceProvider作为指导。在这里,您将构建具有任何依赖项的自定义Mailer类(`$ app ['view'],$ app ['events'],可能还有PHPMailer本身)和配置值(smtp服务器,端口,从电子邮件等...)并在....的回调函数中返回它。

$this->app->singleton('mailer', function ($app) {
    ...
});

然后,最后要做的就是测试它。进入config/app.php并使用...

修改该行
Illuminate\Mail\MailServiceProvider::class,

这样它就会输出你设置的新服务提供者类的类名。

答案 1 :(得分:1)

Laravel密码:: broker()在哪里?

您可以在

下找到Password :: broker()的实现。
Illuminate\Auth\Passwords\PasswordBrokerManager.php

在Laravel版本7中的第45行上。

它做什么?

最后,它什么都不做,只返回一个PasswordBroker实例。其实现可以在

下找到
Illuminate\Auth\Passwords\PasswordBroker.php

PasswordBroker的最常见用法是通过使用sendResetLink()方法将其链接到用户的电子邮件来发送密码重置链接。

在后台,它使用由给定代理在auth.php中指定的提供程序。神奇的是,最后您将获得用户模型或其他扩展Authenticable的模型

我希望这能回答您的问题。顺便说一句,要完全理解它,您需要深入研究它。 祝你好运?