Laravel - api请求中的本地化

时间:2017-02-01 12:29:43

标签: laravel laravel-5.3

最近,我已从Laravel 5.3升级到Laravel 5.2

在此,我在routes目录中分别为routeweb定义了两个单独的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这就是为什么我无法从数据库中获取多语言数据的原因。

任何解决方案?如何解决这个问题?

1 个答案:

答案 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',
];

希望这可能有助于某人。