我正在制作一个vue single file component
的网页,并且laravel
为back-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
}
})