【问题标题】:Laravel 5.2 Variable in a group of routeLaravel 5.2 一组路由中的变量
【发布时间】:2016-05-29 23:48:42
【问题描述】:

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

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

...
});

但这显然不起作用..有人已经处理过这种事情吗?

【问题讨论】:

    标签: php laravel routing


    【解决方案1】:

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

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

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

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

    然后您可以简单地将您的中间件添加到 App/Kernel.php 中的 Web 中间件组

    protected $middlewareGroups = [
        'web' => [
            ...
    
            \App\Http\Middleware\VerifyCsrfToken::class,
            \App\Http\Middleware\LocaleMiddleware::class,
        ],
        'api' => [
            'throttle:60,1',
        ],
    ];
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 看起来不错,但我仍然希望我能找到解决方案,在我的路线中手动设置本地,无需任何包。
      猜你喜欢
      • 2016-12-18
      • 2017-07-19
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 2016-12-01
      • 2016-06-24
      相关资源
      最近更新 更多