tol64
@tol64

Как избавиться от ошибки Missing required parameters for [Route: password.reset] [URI: {locale}/password/reset/{token}]?

Ошибка возникает при попытке сбросить пароль. На тестовых файлах фреймворка всё работает хорошо. Но после изменения маршрутов возникает ошибка при попытке сбросить пароль. На формах авторизации и регистрации всё нормально.

web.php
Route::group([
    'prefix' => '{locale}',
    'where' => ['locale' => '[a-zA-Z]{2}'],
    'middleware' => 'setlocale'
], function () {
    Route::get('/', function () {
        return view('index');
    });
    Auth::routes();
});

Результат
Illuminate\Routing\Exceptions\UrlGenerationException
Missing required parameters for [Route: password.reset] [URI: {locale}/password/reset/{token}].

Подскажите пожалуйста, как решить эту проблему. Понимаю так, что параметр {token} не передаётся, но как его передать в такой схеме, пока не знаю.
  • Вопрос задан
  • 3838 просмотров
Решения вопроса 2
@jazzus
Т.к. ко всем auth роутам добавляется новая переменная locale ее нужно передавать во всех роутах первым аргументом, иначе будут ошибки. В этом случае в нотификации ResetPassword в строке
->action(Lang::get('Reset Password'), url(config('app.url').route('password.reset', ['en', 'token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset()], false)))

В вендоре менять ничего нельзя. Нужны свои файлы и методы, как это делать в гугле куча материала.
Нужно пройтись по всем роутам, искать по name роута (например здесь 'password.reset') и добавить локаль первым аргументом.
Ответ написан
tol64
@tol64 Автор вопроса
Для того, чтобы ошибка не проявлялась при описанной схеме, достаточно сделать необязательным (?) префикс-параметр, а также перечислить языки регулярным выражением, как в листинге ниже:
Route::group([
    'prefix' => '{locale?}',
    'where' => ['locale' => '^ru|en$']
    'middleware' => 'setlocale'
], function () {
    Route::get('/', function() {
        return view('index');
    });
    Auth::routes();
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы