【问题标题】:Translate pages - Missing required parameters for Route翻译页面 - 缺少 Route 所需的参数
【发布时间】:2018-06-08 19:01:05
【问题描述】:

我在网站页脚有一个选择菜单。每个选项都是一个国家的名称。该站点默认为英语,但用户应该能够选择可用的 5 个国家之一,并且该站点应该将文本翻译成该选定的语言。

下面的代码显示为“Missing required parameters for [Route: site.translate] [URI: {language}].”。你知道错误在哪里吗?

// 语言环境中间件

class LocaleMiddleware
{
    protected $languages = ['en','fr','es', 'de'];
    public function handle($request, Closure $next)
    {
        if(!session()->has('locale'))
        {
            session()->put('locale', $request->getPreferredLanguage($this->languages));
        }
        app()->setLocale(session('locale'));
        return $next($request);
    }
}

// TranslateLocale 控制器

class TranslateLocale extends Controller
{
    public function language($language)
    {
        if(Session::has(locale)){
            session()->set('locale', $language);}
        else{
            session()->set('locale', 'en');
        }

        return redirect()->back();
    }
}

路线:

Route::get('/{language}', [
    'uses' => 'TranslateLocale@language',
    'as'   =>'site.translate'
]);

页脚的HTML选择菜单供用户选择语言:

<h3>Language</h3>
<form method="get" action="{{route('site.translate')}}">
    {{csrf_field()}}
    <select name="language" class="form-control" id="exampleFormControlSelect1">
        <option selected class="selected" value="de">German</option>
        <option value="en">English</option>
        <option value="fr">French</option>
        <option value="es">Spanish</option>
        <option>5</option>
    </select>
</form>

【问题讨论】:

    标签: laravel


    【解决方案1】:

    Form 将您的参数附加为 GET 值,因此 laravel 不会将其识别为可变语言,如果您想保持路由原样,您应该生成 url,但是我认为更简单的解决方案是将您的路线和控制器调整为这样的:

    方法一:

    路线

    Route::get('/language', [
        'uses' => 'TranslateLocale@language',
        'as'   =>'site.translate'
    ]);
    

    控制器

    class TranslateLocale extends Controller
    {
        public function language(Request $request)
        {
            if (Session::has(locale)) :
               session()->set('locale', $request->language);//obtain value from GET parameter
            else :
                session()->set('locale', 'en');
            endif;
    
            return redirect()->back();
        }
    }
    

    如果您确实需要维护现有路线,一种解决方法是根据所选值使用 javascript 创建路线,可以使用以下方法完成:

    // 附加和 id 到你的表单 -> id="languageForm" 然后用js:

    $('#languageForm').submit(function(e) {
       // change action route from the default GET /?language to /{language}
       $('#languageForm').attr('action', '/' + $('#exampleFormControlSelect1').val());
       // not sure if you need to specify .submit() on the form again, try with or without hehe xd
       $('#languageForm').submit();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-03
      • 2021-08-17
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多