Laravel 5.2一组路线中的变量

时间:2016-02-18 01:00:16

标签: php laravel routing

我建立了一个多语言网站,为了显示正确的语言,我做了类似的事情:

routes.php文件:

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

Route::auth();
Route::get('home', 'HomeController@index');
etc...

});

我的控制器:

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

正如您所看到的,我从前缀中获取了局部变量,并在每个函数中将应用设置为本地。

这是完美的工作,但我想知道是否有更好的方法来做到这一点?我觉得这有点多余..

我正在考虑直接在路由组中设置应用本地。 像这样:

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

app()->setLocale($locale);

Route::auth();
Route::get('home', 'HomeController@index');

...
});

但这显然不起作用。有人已经处理过这类事了吗?

2 个答案:

答案 0 :(得分:1)

我几天前找到了解决方案,我想在这里分享。

答案其实很简单:中间件!

首先创建一个新的中间件(在我的案例中是LocaleMiddleware)

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

然后,您只需将中间件添加到App / Kernel.php

中的Web Middleware组即可
protected $middlewareGroups = [
    'web' => [
        ...

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

希望这有帮助!

答案 1 :(得分:0)

使用此程序包帮助我进行本地化https://github.com/mcamara/laravel-localization