会话在vue + laravel页面上不起作用

时间:2018-07-25 23:09:50

标签: php laravel session vue.js

我正在制作一个vue single file component的网页,并且laravelback-end,该网页是多语言的,我使用ajax发送用户选择的语言并将其保存到会话,因此我可以在AppServiceProvider中setLocale(session()->get('lang;)),我需要laravel返回一些错误,例如授权,验证等。 问题在于该会话没有被保存。

如果我在保存呼叫的return session()->get('lang')中返回了我发送的内容。 但是如果我在下一次调用另一个控制器时return session()->get('lang'),它将返回null

我正在使用file driver,将其更改为cookie,但是它也不起作用。

我如何使会议正常进行?

根据要求

我正在使用laravel混合来捕获vue,据我所知我没有使用任何代理,我现在在本地运行它

我的路线在api文件上,所以我猜它使用了api中间件默认值

Route::namespace('Home')->group(function(){
    Route::get('home','HomeController@getIndex');
    Route::get('home/change-lang','LangController@changeLang');

    Route::get('news/{type}','NewsController@getNews');

});

控制器

<?php

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class LangController extends Controller
{
    //
    public function changeLang(Request $request)
    {
        app()->setLocale($request->input('lang'));
        session(['lang' => $request->input('lang')]);
        return response()->json([
            'lang' => app()->getLocale()
        ]);
    }
}

AppServiceProvider

<?php

namespace App\Providers;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        app()->setLocale(session()->has('lang') ? session()->get('lang') : 'es');
    }
}

前面的路由配置是

const router = new VueRouter({
    mode: 'history',
    routes: [
        {
            path: '/rdjvzla/public/home/',
            name: 'home',
            component: Home
        },
        {
            path: '/rdjvzla/public/home/news/:type',
            name: 'news',
            component: News
        }
    ]
});

我这样发送请求

this.$axios.get(this.$asset('api/home/change-lang'),{
    params : {
        lang : this.$i18n.locale
    }
})

0 个答案:

没有答案