2016-02-18 13 views
5

baute ich eine mehrsprachige Website und um die richtige Sprache ich so etwas tun, um anzuzeigen:Laravel 5.2 Variable in einer Gruppe von Route

routes.php:

Route::group(['middleware' => 'web', 'prefix' => '{locale}'], function() { 

Route::auth(); 
Route::get('home', '[email protected]'); 
etc... 

}); 

Meine Controller:

Wie Sie sehen können, bekomme ich die lokale Variable von meinem Präfix und ich stelle die App lokal innerhalb jeder Funktionen.

Das funktioniert perfekt, aber ich frage mich, ob es einen besseren Weg gibt, es zu tun? Ich fühle, dass es ein wenig überflüssig ist.

Ich dachte daran, die App lokal direkt in der Routengruppe zu setzen. Etwas wie folgt aus:

Route::group(['middleware' => 'web', 'prefix' => '{locale}'], function ($locale) { 

app()->setLocale($locale); 

Route::auth(); 
Route::get('home', '[email protected]'); 

... 
}); 

Aber das funktioniert offenbar nicht .. Hat hat someones mit dieser Art von Dingen bereits behandelt?

Antwort

1

ich die Lösung ein paar vor Tagen gefunden, wollte ich es hier teilen.

Die Antwort ist eigentlich ganz einfach: Middleware!

zunächst eine neue Middleware (in meinem Fall LocaleMiddleware) erstellen

class LocaleMiddleware 
{ 
    public function handle($request, Closure $next) 
    { 
     app()->setLocale($request->locale); 
     return $next($request); 
    } 
} 

Dann können Sie einfach Ihre Middleware zu der Gruppe Web-Middleware hinzufügen in App/Kernel.php

protected $middlewareGroups = [ 
    'web' => [ 
     ... 

     \App\Http\Middleware\VerifyCsrfToken::class, 
     \App\Http\Middleware\LocaleMiddleware::class, 
    ], 
    'api' => [ 
     'throttle:60,1', 
    ], 
]; 

this helps !

Verwandte Themen