【问题标题】:Passing the language parameter to the next page (url) when submitting the form提交表单时将语言参数传递到下一页(url)
【发布时间】: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 不,我这样做了

标签: php laravel routes translation url-parameters


【解决方案1】:

据我了解,您的问题是 {locale} 参数没有值,如果您没有明确地将一个传递给 route() 函数。您可以使用route binding(请参阅“自定义解析逻辑”)来保证它始终有一个值,回退到当前语言环境:

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

    return $value;
});

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

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

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2013-09-14
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多