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

Posted

技术标签:

【中文标题】提交表单时将语言参数传递到下一页(url)【英文标题】:Passing the language parameter to the next page (url) when submitting the form 【发布时间】:2019-09-15 16:08:08 【问题描述】:

我在提交表单时无法在 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()) ">

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

【问题讨论】:

你会发现使用 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)的主要内容,如果未能解决你的问题,请参考以下文章

表单传递选择到下一页

将数据从按钮传输到下一页的帖子表单。 Django的

asp中如何通过url传递参数

如何在 Struts2 中提交表单的 URL 中传递参数

Django,如何在提交表单时将 HTML 表单值传递给 URL?

将 $_GET 变量传递到下一页