I am making a web page with vue single file component
, and laravel
as back-end
the page is multi-lenguage, i send the language selected by the user with ajax and save it to the session, so i can setLocale(session()->get('lang;))
in the AppServiceProvider, i need laravel to return some errors, like authorizations, validations, etc.
The problem is that the session is not being saved.
if i return session()->get('lang')
in the call where i am saving it, it returns what i am sending.
but if i return session()->get('lang')
in my next call to another controller, it returns null
i am using the file driver
, change it to cookie
but it did not work either.
how can i make the session work?
As requested
I am using the laravel mix for copiling vue, as far as i know i am not using any proxy, i am running it on local for now
My routes are on the api file so i guess it uses the api middleware default
Route::namespace('Home')->group(function(){
Route::get('home','HomeController@getIndex');
Route::get('home/change-lang','LangController@changeLang');
Route::get('news/{type}','NewsController@getNews');
});
The controller
<?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');
}
}
the route configuration in the front is
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
}
]
});
and i send the request like this
this.$axios.get(this.$asset('api/home/change-lang'),{
params : {
lang : this.$i18n.locale
}
})