【发布时间】:2017-01-02 12:23:12
【问题描述】:
最近我从Laravel 5.2 升级到Laravel 5.3,之后我发现我为设置用户语言创建的Localization 中间件停止工作,不知道为什么?
我正在使用基于authentication 的token。
中间件如下:
<?php namespace App\Http\Middleware;
use Closure;
use PhpSpec\Exception\Exception;
use Illuminate\Support\Facades\Auth;
class Localization {
public function handle($request, Closure $next, $guard = null)
{
if(!Auth::guard()->guest())
{
if(!session('current_locale')) {
$localecode = Auth::guard($guard)->user()->getLocale();
session('current_locale',empty ($localecode) ? 'en' : $localecode);
\App::setLocale($localecode);
}else{
\App::setLocale(session('current_locale'));
}
}
return $next($request);
}
}
而我的routes/api.php 是:
Route::group(['prefix' => 'api/service/v1', 'middleware' => ['api'], 'guard' => 'api'], function(){
Route::get("someUrlHere","SomeControler@SomeMethod");
Route::group(['middleware' => ['auth:api','localization','beforeMiddleware', 'afterApiCallMiddleware'], 'guard' => 'api'], function() {
Route::get("SomeOtherUrlHere","SomeOtherControler@SomeOtherMethod");
});
});
config/auth.php 为:
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
],
],
];
app/Http/Kernal.php 为:
<?php namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel {
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
'Barryvdh\Cors\HandleCors',
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'localization'=>'App\Http\Middleware\Localization',
'afterMiddleware' => 'App\Http\Middleware\AfterMiddleware',
'beforeMiddleware' => 'App\Http\Middleware\BeforeMiddleware',
'afterApiCallMiddleware' => 'App\Http\Middleware\AfterApiCall',
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
];
}
每次调用该方法时,我在Localization 中间件的handle() 方法中发现$guard 为空。
【问题讨论】:
-
显示你的 auth.php
-
好的。让我发一下。
-
@msonowal 我已经发布了。
-
您还介意发布您的
app/Http/Kernel.php吗? -
您是否尝试通过指定 $guard='api' 来更改公共函数句柄($request, Closure $next, $guard = null)
标签: laravel laravel-5.3 middleware