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



提交表单时,我在 url 中获取正确的语言参数时遇到问题。
我的应用程序有两个可能的语言参数: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');
  • 如何在表单操作中从验证页面 url 中的表单页面('/en/index/[..]')获取语言参数?

  • 尝试提交表单时,setLocale.php中间件中的handle函数不应该为我提供语言参数吗?
    如果是,我怎样才能实现将其传递到下一页(通过表单操作)?

编辑

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

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

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

据我了解,您的问题是,如果您不显式将{locale}参数传递给route()函数,则 参数没有值。您可以使用路由绑定(请参阅"自定义解析逻辑")来保证它始终具有一个值,并回退到当前区域设置:

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

这指示 Laravel 在看到名为locale的路由参数并使用其返回值时调用此函数。如果参数没有值,它将返回当前区域设置。

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

最新更新