【发布时间】:2020-11-01 18:39:57
【问题描述】:
使用 Laravel 7.19
我所有的路线都需要一个 locale ,包括我的 Auth Routes 以支持不同的语言。我已经为用户激活了电子邮件验证。
所以一旦一个用户,没有验证他的电子邮件,试图打开我的网站的一部分,需要验证电子邮件,Laravel 会自动将他们重定向到这条路线:verification.notice
问题是路由需要语言环境参数,但我不知道如何将语言环境传递给路由。所以我收到了这个错误信息
Missing required parameters for [Route: verification.notice] [URI: {locale}/email/verify].
任何人都知道将我重定向到路线的功能:verification.notice?因为我需要调整或覆盖它,所以我可以将 locale 参数传递给它。
我的网页.php
Route::group(['middleware' => ['setlocale'],'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function() {
Auth::routes(['verify' => true]);
});
编辑:发现有用的东西。在文件 /vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php 里面
有一个函数句柄
如果我添加 app()->getLocale() 到它,错误信息就消失了。现在是这个样子
public function handle($request, Closure $next, $redirectToRoute = null)
{
if (! $request->user() ||
($request->user() instanceof MustVerifyEmail &&
! $request->user()->hasVerifiedEmail())) {
return $request->expectsJson()
? abort(403, 'Your email address is not verified.')
: Redirect::route($redirectToRoute ?: 'verification.notice',app()->getLocale());
}
return $next($request);
}
但我认为您不应该对 /vendor/laravel/framework/src/Illuminate/Auth/Middleware/EnsureEmailIsVerified.php 进行更改
如何正确覆盖这个函数?
【问题讨论】: