2016-02-18 12 views
5

Zbudowałem Język strony wielofunkcyjnego oraz w celu wyświetlenia prawidłowego języka zrobić coś takiego:laravel 5,2 Zmienny w grupie trasie

Routes.php:

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

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

}); 

moim kontrolerów:

<?php 

namespace App\Http\Controllers; 

use App\Http\Controllers\Controller; 
use App\Http\Requests; 
use Illuminate\Http\Request; 

class HomeController extends Controller 
{ 
    public function index($locale) 
    { 
     app()->setLocale($locale); 
     return view('home'); 
    } 
} 

Jak widać, otrzymuję lokalną zmienną z mojego prefiksu i ustawiam lokalną lokację w ramach każdej funkcji.

Działa to doskonale, ale zastanawiam się, czy istnieje lepszy sposób na zrobienie tego? Czuję, że to trochę zbędne.

Myślałem, aby ustawić aplikację lokalnie bezpośrednio w grupie tras. coś takiego:

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

app()->setLocale($locale); 

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

... 
}); 

Ale to oczywiście nie działa .. Czy czyjąś zajmuje się tego rodzaju rzeczy już?

Odpowiedz

1

znalazłem rozwiązanie kilka dni temu, chciałem to zrobić tutaj.

Odpowiedź jest całkiem prosta: oprogramowanie pośrednie!

Najpierw utwórz nowy middleware (w moim przypadku LocaleMiddleware)

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

Następnie można po prostu dodać swój middleware do grupy Web Middleware w app/Kernel.php

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

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

Nadzieja to pomaga !