Laravel语言切换不适用于Laravel 5.5中的某些路由

时间:2018-04-12 09:07:26

标签: routing locale url-redirection laravel-5.5

我已在项目中成功设置语言切换器。它在某些页面上工作得很好,但在某些页面中却没有。 这是我的语言切换表单

<form id="language_switcher_form"  action="language" method="post">
    <select     name="locale" id="language_switcher">
        <option value="en" {{App::getLocale()=='en'?' selected' : ''}} class="mt-english"> English</option>
        <option value="np" {{App::getLocale()=='np'?' selected' : ''}}  class="mt-nepali">Nepali</option>
    </select>
    {{ csrf_field() }}
</form> 

我提交表单的javascript是:

$( "#language_switcher" ).change(function() {
  $("#language_switcher_form").submit();
});

语言切换的路由是:

Route::resource('properties', 'PropertiesController');
Route::post('/language', array(
    'Middleware'=>'LanguageSwitcher',
    'uses'=>'LanguageController@index'
));

我的中间件

<?php
namespace App\Http\Middleware;
use Closure;
use App;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Config;

class LanguageSwitcher
{
    public function handle($request, Closure $next)
    {
        App::setLocale(Session::has('locale')? Session::get('locale'): Config::get('app.locale'));
        return $next($request);
    }
}

我的语言控制器是:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Session;
use Redirect;
use App\Http\Requests;

class LanguageController extends Controller
{
    public function index(){
        if(!\Session::has('locale')){
            \Session::put('locale', Input::get('locale'));
        }
        else{
            session(['locale' => Input::get('locale')]);
        }
        return Redirect::back();
    }
}

当我尝试从主页或http://localhost/myproject/properties 切换语言时,按预期工作。但是,当我尝试从http://localhost/gharsansar/properties/create执行相同操作时,它会将我重定向到http://localhost/gharsansar/properties/ 语言。类似于http://localhost/gharsansar/properties/12,它会重定向到http://localhost/gharsansar/properties/ 语言。我犯了什么错误? 它抛出了这个错误。

  

Symfony \ Component \ HttpKernel \ Exception \   MethodNotAllowedHttpException没有消息

提前谢谢。

1 个答案:

答案 0 :(得分:1)

请试试这个:

<form action="{{ route('switch') }}">

和路线:

Route::post('/language',array('Middleware'=>'LanguageSwitcher','uses'=>'LanguageController@index'))->name('switch');