提交表单时将language参数传递到下一页(url)

时间:2019-04-26 07:18:23

标签: php laravel routes translation url-parameters

提交表单时,我无法在url中获取正确的language参数。
我的应用程序有两个可能的语言参数:deen

我使用此功能制作了一个名为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') }}">

当我要提交表单并且输入内容经过验证时,您应该进入上面显示的路线。
但是网址只会是:/ticket,而不是en/ticketde/ticket

顺便说一下,您通过链接到达表单站点,因此语言参数是静态的,如下所示:

Route::get('/en/index/{param1?}/{param2?}', 'TicketController@index')->name('index');
Route::get('/de/index/{param1?}/{param2?}', 'TicketController@index')->name('index');
  • 如何从验证页面网址中的表单页面('/ en / index / [..]')获取语言参数,因此在表单操作中?

  • 在尝试提交表单时,handle中间件中的setLocale.php函数不能让我获得语言参数吗?
    如果是,如何实现(通过表单操作)将其传递到下一页?

编辑

当我像这样编辑表单操作时,它工作正常:

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

这将是一个好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

据我了解,您的问题是,如果您没有将参数{locale}显式传递给route()函数,那么该参数将毫无价值。您可以使用route binding(请参阅“自定义分辨率逻辑”)来确保它始终具有一个值,并依赖于当前的语言环境:

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

    return $value;
});

这指示Laravel在看到名为locale的路由参数并使用其返回值时调用此函数。而且,如果该参数没有值,它将返回当前语言环境。

但是请注意,这会影响所有名为locale的URL参数。如果您有任何路由的locale参数允许为空,则必须在其中一条路由中重命名。