这就是Laravel容器发挥作用的地方。如果您不喜欢核心组件的功能,那么您可以相对轻松地进行覆盖。
首先,您需要创建自己的PasswordBroker:
namespace App\Auth\Passwords;
use Illuminate\Auth\Passwords\PasswordBroker as IlluminatePasswordBroker;
class PasswordBroker extends IlluminatePasswordBroker
{
public function emailResetLink()
{
$view = $this->emailView;
return $this->mailer->queue($view, compact('token', 'user'), function ($m) use ($user, $token, $callback) {
$m->to($user->getEmailForPasswordReset());
if (! is_null($callback)) {
call_user_func($callback, $m, $user, $token);
}
});
}
}
如果您想将其放置在应用程序的其他位置,请更改命名空间。
由于注册服务提供程序是一个延迟服务提供程序,因此您需要创建自己的提供程序来替换它。可能最简单的方法是使用以下内容扩展Illuminate\Auth\Passwords\PasswordResetServiceProvider
:
namespace App\Providers;
use App\Auth\Passwords\PasswordBroker;
class PasswordResetServiceProvider extends \Illuminate\Auth\Passwords\PasswordResetServiceProvider
{
protected function registerPasswordBroker()
{
$this->app->singleton('auth.password', function ($app) {
$tokens = $app['auth.password.tokens'];
$users = $app['auth']->driver()->getProvider();
$view = $app['config']['auth.password.email'];
return new PasswordBroker(
$tokens, $users, $app['mailer'], $view
);
});
}
}
最后在你的config/app.php
文件中,删除Illuminate\Auth\Passwords\PasswordResetServiceProvider::class
并将App\Providers\PasswordResetServiceProvider::class
添加到你的'providers'
数组中。
Laravel现在会使用你的PasswordBroker实现而不是框架自带的,你不必担心修改框架代码。
vendor/laravel/framework/src/illuminate/Auth/Passwords/PasswordBroker.php
- Pathros