我建立了一个多语言的网站,为了显示正确的语言,我做了这样的事情:
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');
...
});
但这显然是行不通的。是否有人已经处理过这种事情?
几天前我找到了解决方案,我想在这里分享。
答案实际上很简单:中间件!
首先创建一个新的中间件(在我的情况下为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',
],
];
希望这可以帮助 !
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句