最近,我已从Laravel 5.3
升级到Laravel 5.2
。
在此,我在routes目录中分别为route
和web
定义了两个单独的api
文件。
我有一个multilingual
门户网站。我提供更改语言的选项。为此,我使用localization
中间件。请参阅下面的代码:
Localization.php:
class Localization {
public function handle($request, Closure $next, $guard=null){
if(!Auth::guard($guard)->guest()){
if (Session::has('current_locale')) {
$locale = Session::get('current_locale');
}
else {
$locale = Auth::guard($guard)->user()->getLocale();
Session::set('current_locale', $locale);
}
App::setLocale($locale);
}
return $next($request);
}
}
routes / web.php 如下:
Route::group(['middleware' => ['web']], function(){
Route::group(['middleware' => ['localization:web']], function () {
//Some web routes here
});
});
routes / api.php 如下:
Route::group(['prefix' => 'api/service/v1', 'middleware' => ['api']], function(){
Route::group(['middleware' => ['auth:api','localization:api']], function() {
//Some api routes here
});
});
config / auth.php 如下:
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
]
],
'passwords' => [
'users' => [
'provider' => 'users',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
]
]
];
在选择不同语言时,我将所选语言存储在{{1}}中,并在后续请求中使用它来设置应用程序语言。
但问题是,我使用session
请求使用Ajax
获取数据。在APIs
中间件中设置了保护api
,因此我无法访问localization
这就是为什么我无法从数据库中获取多语言数据的原因。
任何解决方案?如何解决这个问题?
答案 0 :(得分:1)
我已通过更新$middleware
中的app/Http/Kernal.php
数组来解决此问题:
protected $middleware = [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
'Barryvdh\Cors\HandleCors',
];
希望这可能有助于某人。