【问题标题】:Laravel Missing required parameters for Route: verification.noticeLaravel 缺少路由所需的参数:verification.notice
【发布时间】: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 进行更改

如何正确覆盖这个函数?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    听起来您必须复制该中间件代码并以这种方式修改它。只需从vendor 目录中复制Illuminate\Auth\Middleware\EnsureEmailsVerified.php 的代码(顺便说一下,您不应该自行编辑),在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 包的一部分)。

    【讨论】:

    • 感谢工作。我通过 php artisan make:middleware EnsureEmailIsVerified 创建了一个新的中间件,然后将 EnsureEmailsVerified 中的代码复制到新的中间件中,并在 kernel.php 中注册了新的中间件。看起来不错。
    猜你喜欢
    • 2019-01-09
    • 2020-08-07
    • 2020-12-25
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    相关资源
    最近更新 更多