翻译页面 - 缺少路线所需的参数

时间:2018-06-08 09:45:21

标签: laravel

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

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

// LocaleMiddleware

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>

1 个答案:

答案 0 :(得分:0)

表单将您的参数附加为 GET 值,因此laravel不会将其识别为变量语言,如果您希望保持路径的方式应该生成网址,但我认为更简单的解决方案是将您的路线和控制器调整为:

方法1:

<强>路线

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 - &gt; 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();
});