Передача параметра языка на следующую страницу (URL) при отправке формы - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблемы с получением правильного языкового параметра в URL при отправке формы.
Мое приложение имеет два возможных языковых параметра: de и en.

Я сделал промежуточное программное обеспечение setLocale.php с этой функцией:

public function handle($request, Closure $next)
{
    $locale = $request->segment(1);
    app()->setLocale($locale);
    return $next($request);
}

это маршрут в web.php:

Route::post('/{locale?}/ticket', 'TicketController@store')->name('validation');

и вот форма действия:

<form method="post" action="{{ route('validation') }}">

Когда я хочу отправить форму, и ввод подтвержден, вы должны перейти по маршруту, который я вам показал выше.
Но URL будет только: /ticket вместо en/ticket или de/ticket.

Кстати, вы попадаете на сайт формы по ссылкам, поэтому параметры языка статичны:

Route::get('/en/index/{param1?}/{param2?}', 'TicketController@index')->name('index');
Route::get('/de/index/{param1?}/{param2?}', 'TicketController@index')->name('index');
  • Как получить параметр языка со страницы формы ('/ ru / index / [..]') в URL страницы проверки, следовательно, в действии формы?

  • Разве функция handle в промежуточном программном обеспечении setLocale.php не может получить языковой параметр при попытке отправить форму?
    Если да, как я могу добиться передачи его на следующую страницу (через действие формы)?

EDIT

Работает нормально, когда я редактирую действие формы следующим образом:

<form method="post" action="{{ route('validation', app()->getLocale()) }}">

Это было бы хорошим решением?

1 Ответ

0 голосов
/ 26 апреля 2019

Как я понимаю, ваша проблема в том, что параметр {locale} не имеет значения, если вы явно не передаете его в функцию route().Вы можете использовать привязку маршрута (см. «Настройка логики разрешения»), чтобы гарантировать, что она всегда будет иметь значение, возвращаясь к текущей локали:

Route::bind('locale', function ($value) {
    if (!$value) {
        $value = app()->getLocale();
    }

    return $value;
});

Это указывает Laravel навызывайте эту функцию всякий раз, когда она видит параметр маршрута с именем locale и использует его возвращаемое значение.И если для параметра нет значения, он возвращает текущую локаль.

Но учтите, что это повлияет на все параметры URL с именем locale.Если у вас есть какой-либо маршрут, для которого параметр locale должен быть пустым, вам придется переименовать один из маршрутов.

...