Laravel Отсутствуют обязательные параметры для маршрута: verify.notice - PullRequest
0 голосов
/ 12 июля 2020

с использованием Laravel 7.19

для всех моих маршрутов требуется языковой стандарт, включая мои маршруты Auth для поддержки разных языков. И я активировал проверку электронной почты для пользователей.

Итак, как только пользователь, который не подтвердил свой адрес электронной почты, пытается открыть часть моего веб-сайта, требующую проверки электронной почты, Laravel автоматически перенаправляет их на этот route: verify.notice

Проблема в том, что для маршрута требуется параметр локали, но я не знаю, как передать локаль в маршрут. Итак, я получаю это сообщение об ошибке

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

Кто-нибудь знает функцию, которая перенаправляет меня на маршрут: verify.notice? Потому что мне нужно отрегулировать или перезаписать его, чтобы я мог передать ему параметр локали.

My web. php

Route::group(['middleware' => ['setlocale'],'prefix' => '{locale}', 'where' => ['locale' => '[a-zA-Z]{2}']], function() {

Auth::routes(['verify' => true]);   
    
});

EDIT: Found Something usefule. Внутри файла /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 голосов
/ 12 июля 2020

Похоже, вам нужно скопировать этот код промежуточного программного обеспечения и исправить его таким образом. Просто скопируйте код Illuminate\Auth\Middleware\EnsureEmailsVerified.php из каталога vendor (который, кстати, вы никогда не должны редактировать), создайте новое промежуточное ПО в App\Http\Middleware и добавьте его в App\Http\Kernel.

The verification.notice маршрут, который вы видите, добавляется с использованием Auth::routes(['verify' => true]); (его часть - это набор маршрутов по умолчанию для аутентификации / проверки), как показано здесь: https://github.com/laravel/ui/blob/2.x/src/AuthRouteMethods.php#L84 (который является частью пакета laravel/ui) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...