Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只有登录才能使用laravel中的开关语言_Php_Laravel - Fatal编程技术网

Php 只有登录才能使用laravel中的开关语言

Php 只有登录才能使用laravel中的开关语言,php,laravel,Php,Laravel,我在我的网站上使用两种语言。首先,我可以轻松地切换语言,但我不知道发生了什么 现在,如果我登录(auth),我可以切换语言,但如果我以来宾身份登录,我就不能再切换语言了 这是我的路线: //路由 Route::get('locale', function () { return \App::getLocale(); }); Route::get('locale/{locale}', function

我在我的网站上使用两种语言。首先,我可以轻松地切换语言,但我不知道发生了什么

现在,如果我登录(auth),我可以切换语言,但如果我以来宾身份登录,我就不能再切换语言了

这是我的路线:

//路由

Route::get('locale', function () {
    return \App::getLocale();                                            
});

Route::get('locale/{locale}', function ($locale) {
    \Session::put('locale', $locale); 
    return redirect()->back();
});

Route::post('/language-chooser', 'LanguageController@changeLanguage');

Route::post('/language/', array(
    'before' => 'csrf',
    'as' => 'language-chooser',
    'uses' => 'LanguageController@changeLanguage'));
//控制器

public function changeLanguage(Request $request)
{
    if ($request->ajax())
    {
        $request->session()->put('locale',$request->locale);
        $request->session()->flash('alert-success',
            ('app.locale_change_success'));
    }
}
//Middlware

public function handle($request, Closure $next)
{
    if ( Session::has('locale')) {
        $locale = Session::get('locale', Config::get('app.locale'));    
    } else {
        $locale = 'en';
    }

    App::setLocale($locale);

    return $next($request);
} 
}
//查看

<select id="LanguageSwitcher" >
    <option value="en" <?php $cuRRlocal = Config::get('app.locale'); 
        echo ($cuRRlocal == 'en' ? "selected" : "") ?>>English</option>
    <div class="dropdown-divider"></div>
    <option value="ar" <?php $cuRRlocal = Config::get('app.locale'); 
        echo ($cuRRlocal == 'ar' ? "selected" : "") ?> >Arabic</option>
</select>

如果您可以在以auth身份登录时切换语言,那么我认为您已经使用auth中间件保护了
LanguageController
,您能否描述一下当您想要更改语言而未经过身份验证时会发生什么情况

只要检查语言控制器构造函数是否有auth中间件。如果是这种情况,那么您将希望将以下代码删除到另一个控制器,该控制器可供经过身份验证的用户和未经身份验证的用户访问

public function changeLanguage(Request $request)
{
    if ($request->ajax())
    {
        $request->session()->put('locale',$request->locale);
        $request->session()->flash('alert-success',
            ('app.locale_change_success'));
    }
}
我通过添加来解决问题 @csrf 前页

因为我是在写这句话
路由::post('/language/',数组('before'=>'csrf','as'=>'language chooser','uses'=>'LanguageController@changeLanguage')); // 控制器

无法切换语言
-尝试时会发生什么?当我尝试更改语言但未进行身份验证时,什么都没有发生当我尝试更改语言且未进行身份验证时,什么都没有发生我也做了,但什么都没有发生公共函数uuu construct(){$this->中间件('auth',['except'=>['changeLanguage']];}
public function changeLanguage(Request $request)
{
    if ($request->ajax())
    {
        $request->session()->put('locale',$request->locale);
        $request->session()->flash('alert-success',
            ('app.locale_change_success'));
    }
}