提交表单时将语言参数传递到下一页(url)
Posted
技术标签:
【中文标题】提交表单时将语言参数传递到下一页(url)【英文标题】:Passing the language parameter to the next page (url) when submitting the form 【发布时间】:2019-09-15 16:08:08 【问题描述】:我在提交表单时无法在 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') ">
当我想提交表单并验证输入时,您应该到达我在上面向您展示的路线。
但网址只会是:/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');
如何从验证页面的 url 中的表单页面 ('/en/index/[..]') 获取语言参数,因此在表单操作中?
在尝试提交表单时,setLocale.php
中间件中的 handle
函数不应该让我获取语言参数吗?
如果是,如何实现将其传递到下一页(通过表单操作)?
编辑
当我像这样编辑表单动作时它工作正常:
<form method="post" action=" route('validation', app()->getLocale()) ">
这是一个好的解决方案吗?
【问题讨论】:
你会发现使用 formRequest 来处理这个更简单吗? @GingaWRATH 你到底是什么意思? @GingaWRATH 我使用 formRequest 来处理验证,我的问题是提交表单时;我无法将表单页面的语言参数获取到下一页 你没有忘记在app/Http/Kernel
中使用\App\Http\Middleware\setLocale::class
引用你的中间件吗?
@iArcadia 不,我这样做了
【参考方案1】:
据我了解,您的问题是 locale
参数没有值,如果您没有明确地将一个传递给 route()
函数。您可以使用route binding(请参阅“自定义解析逻辑”)来保证它始终有一个值,回退到当前语言环境:
Route::bind('locale', function ($value)
if (!$value)
$value = app()->getLocale();
return $value;
);
这指示 Laravel 在看到名为 locale
的路由参数时调用此函数并使用其返回值。如果参数没有值,则返回当前语言环境。
但请注意,这会影响名为locale
的所有 URL 参数。如果您有任何路由的locale
参数应允许为空,则必须在其中一个路由中重命名。
【讨论】:
以上是关于提交表单时将语言参数传递到下一页(url)的主要内容,如果未能解决你的问题,请参考以下文章