2017-02-01 2 views
2

Kürzlich habe ich von Laravel 5.3 auf Laravel 5.2 aktualisiert.Laravel - Lokalisierung in api Anfrage

In diesem habe ich zwei separate route Dateien für web bzw. api im Verzeichnis routes definiert.

Ich habe ein multilingual Portal. Ich biete die Möglichkeit, die Sprache zu ändern. Dafür verwende ich localization Middleware. Bitte beachten Sie meinen Code unten:

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); 
    } 
} 

Die Routen/web.php ist als:

Route::group(['middleware' => ['web']], function(){ 
    Route::group(['middleware' => ['localization:web']], function() { 
     //Some web routes here 
    }); 
}); 

Und Routen/api.php ist wie:

Route::group(['prefix' => 'api/service/v1', 'middleware' => ['api']], function(){ 
    Route::group(['middleware' => ['auth:api','localization:api']], function() { 
     //Some api routes here 
    }); 
}); 

config/Auth.php ist als:

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, 
     ] 
    ] 
]; 

auf andere Sprache wählen, ich die gewählte Sprache in einem session bin Speicherung und ich verwende es für die nachfolgenden Anforderungen der App Sprache einzustellen.

Aber das Problem ist, ich verwende Ajax Anfragen, um die Daten mit APIs zu erhalten. Und in dem die Wache api ist in localization Middleware eingestellt, daher kann ich nicht auf die Session zugreifen, deshalb bin ich nicht in der Lage, die mehrsprachigen Daten aus der Datenbank zu bekommen.

Irgendeine Lösung? Wie behebe ich das?

Antwort

1

Ich habe dieses Problem mich selbst festgelegt durch die Aktualisierung $middleware Array in app/Http/Kernal.php als:

protected $middleware = [ 
    \App\Http\Middleware\EncryptCookies::class, 
    \Illuminate\Session\Middleware\StartSession::class, 
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
    'Barryvdh\Cors\HandleCors', 
]; 

Hope this jemand helfen könnte.