【问题标题】:Translate site: missing required parameter for route翻译网站:缺少路线所需的参数
【发布时间】:2018-07-13 20:48:49
【问题描述】:

我有一个选择菜单供用户选择 3 种语言中的一种(英语、西班牙语和德语)。目标是,如果用户选择英语,则站点的所有内容都变为英语,其他语言也一样。

我有下面的代码,但它不起作用。出现missing required parameter for route site.translate

语言控制器:

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

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

HTML:

<div class="col-6 col-lg-3 pt-4 pb-4">
  <div class="footer-list">
    <h3>Language</h3>
    <form method="get" action="{{route('site.translate')}}">
      {{csrf_field()}}
      <select name="language" class="form-control font-weight-normal text-gray" id="exampleFormControlSelect1">
        <option selected class="selected" value="de">German</option>
        <option value="en">English</option>
        <option value="de">German</option>
        <option value="es">Spanish</option>
      </select>
    </form>
  </div>
</div>

LocaleMiddleware:

    <?php

    namespace App\Http\Middleware;

    use Closure;

    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);
        }
    }

路线:

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

【问题讨论】:

  • 您的路线似乎缺少参数。它需要看起来像这样route('post.show', ['post' =&gt; 1]); 你能告诉我们你的 trainslate 网络路线吗?

标签: php laravel


【解决方案1】:

问题是您的路线需要一个参数。 lang/{language} 进行表单发布时不需要参数。此外,您需要将表单设置为 POST 而不是 GET

所以改为这样做。

路线:

Route::post('/lang', [
    'uses' => 'LanguageController@changeLanguage',
    'as'   =>'site.translate'
]);

查看:

<div class="col-6 col-lg-3 pt-4 pb-4">
  <div class="footer-list">
    <h3>Language</h3>
    <form method="post" action="{{route('site.translate')}}">
      {{csrf_field()}}
      <select name="language" class="form-control font-weight-normal text-gray" id="exampleFormControlSelect1">
        <option selected class="selected" value="de">German</option>
        <option value="en">English</option>
        <option value="de">German</option>
        <option value="es">Spanish</option>
      </select>
    </form>
  </div>
</div>

控制器:

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

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

【讨论】:

  • 谢谢,你知道为什么会出现“使用未定义的常量语言环境 - 假定为'语言环境'”吗?
  • @Carrick 首先调试控制器。在表单中添加一个普通的提交按钮,而不是 jQuery。在控制器中执行dd($request-&gt;language); 以查看值是否是从表单传入的。然后看看条件逻辑是否是问题,如果它被正确传递。
  • @Carrick 创建一个新问题,我会为您解答。
  • $request->language 显示正确的结果“de”、“es”等,具体取决于所选的选择选项。
猜你喜欢
  • 1970-01-01
  • 2017-02-27
  • 2021-09-02
  • 2023-02-07
  • 2021-09-19
  • 2019-01-09
  • 2020-08-07
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多