我正在尝试在Laravel中自定义密码重置电子邮件。
我必须覆盖此功能:
namespace Illuminate\Auth\Passwords;
use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification;
use Illuminate\Http\Request;
trait CanResetPassword
{
/**
* Get the e-mail address where password reset links are sent.
*
* @return string
*/
public function getEmailForPasswordReset()
{
return $this->email;
}
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPasswordNotification($token));
}
这是我的尝试:
public function sendPasswordResetNotification($token, Requests $request)
{
Mail::to($request->email)->send(new newpassword($token));
}
我收到此错误:
宣言 照亮\基金会\验证\用户:: sendPasswordResetNotification($令牌, Illuminate \ Http \ Request $ request)必须兼容 照亮\合同\验证\ CanResetPassword :: sendPasswordResetNotification($令牌)
答案 0 :(得分:7)
如果您阅读错误,则会告诉您您的课程与CanResetPassword
不兼容。如果你看那个....
interface CanResetPassword
{
/**
* Get the e-mail address where password reset links are sent.
*
* @return string
*/
public function getEmailForPasswordReset();
/**
* Send the password reset notification.
*
* @param string $token
* @return void
*/
public function sendPasswordResetNotification($token);
}
您可以看到函数sendPasswordResetNotification
只应该使用一个参数$token
。因此,您需要从方法的签名中删除Request $request
作为参数。
要获取请求,您需要使用request()
方法中的sendPasswordResetNotification
函数。
public function sendPasswordResetNotification($token)
{
Mail::to(request()->email)->send(new newpassword($token));
}
答案 1 :(得分:6)
我很惊讶你要自定义电子邮件。
请改为尝试:
php artisan vendor:publish
然后在这里修改文件
/resources/views/vendor/notifications/email.blade.php
非常适合我们的使用。
user@default:~/laravel_5.4$ php artisan vendor:publish
Copied Directory [/vendor/laravel/framework/src/Illuminate/Pagination/resources/views] To [/resources/views/vendor/pagination]
Copied Directory [/vendor/laravel/framework/src/Illuminate/Notifications/resources/views] To [/resources/views/vendor/notifications]
Copied Directory [/vendor/laravel/framework/src/Illuminate/Mail/resources/views] To [/resources/views/vendor/mail]
Publishing complete.
现在,如果您需要更改副本并且想要原始ResetPassword类使用的花哨按钮,则可以在User.php类中扩展邮件类,如下例所示。
这是我们的副本,只作为一个例子:
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Auth\Notifications\ResetPassword;
use Illuminate\Notifications\Messages\MailMessage;
class User extends Authenticatable
{
use Notifiable;
protected $table = 'Users';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'firstName',
'lastName',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Sends the password reset notification.
*
* @param string $token
*
* @return void
*/
public function sendPasswordResetNotification($token)
{
$this->notify(new CustomPassword($token));
}
}
class CustomPassword extends ResetPassword
{
public function toMail($notifiable)
{
return (new MailMessage)
->line('We are sending this email because we recieved a forgot password request.')
->action('Reset Password', url(config('app.url') . route('password.reset', $this->token, false)))
->line('If you did not request a password reset, no further action is required. Please contact us if you did not submit this request.');
}
}