Laravel缺少路线所需的参数:verification.notice

时间:2020-07-12 12:30:32

标签: php laravel

使用Laravel 7.19

我所有的路线都需要一个语言环境,包括我的Auth路线以支持不同的语言。而且我已经为用户激活了电子邮件验证。

因此,一旦未验证电子邮件的用户尝试打开需要验证电子邮件地址的我的网站的一部分,Laravel就会自动将其重定向到以下路径:Verification.notice

问题在于路由需要locale参数,但是我不知道如何将语言环境传递给路由。所以我收到此错误消息

Missing required parameters for [Route: verification.notice] [URI: {locale}/email/verify]. 

任何人都知道将我重定向到路由的功能:Verification.notice吗?因为我需要调整或覆盖它,所以我可以将locale参数传递给它。

我的web.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

如何正确覆盖此功能?

1 个答案:

答案 0 :(得分:0)

听起来像您必须复制该中间件代码并以这种方式进行修改。只需从Illuminate\Auth\Middleware\EnsureEmailsVerified.php目录中复制vendor的代码(您绝对不能对其进行编辑),在App\Http\Middleware中创建一个新的中间件并将其添加到App\Http\Kernel中。

您看到的verification.notice路由是使用Auth::routes(['verify' => true]);添加的(它是一组用于身份验证/验证的默认路由),如下所示:https://github.com/laravel/ui/blob/2.x/src/AuthRouteMethods.php#L84(这是laravel/ui包)。