Lavavel 5.1升级到 5.2 带来的问题

中间件组

中间件组允许你通过单个方便的键来对相关路由中间件进行分组,从而为某个路由一次指定多个中间件。例如,在同一个应用中构建 Web UI 或 API 时这一特性很有用,你可以将 session 和 csrf 路由分组到一个 web 组,或者将访问频率限制分组到 api 中。

实际上,默认的 Laravel 5.2 应用结构采用的正是这个方法。例如,在默认的 App\Http\Kernel.php 文件中你会看到如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 /**
* The application's route middleware groups.
*
* @var array
*/
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,
],

'api' => [
'throttle:60,1',
],
];

然后,web 组像这样分配给路由:

1
2
3
 Route::group(['middleware' => ['web']], function () {
//
});

中间件组引发的问题

5.1及之前版本,中间件被应用到所有路由。而现在5.2需要手动分配中间件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 修改 vendor/mews/captcha/src/CaptchaServiceProvider.php
/**
* Boot the service provider.
*
* @return null
*/
public function boot()
{
// Publish configuration files
$this->publishes([
__DIR__.'/../config/captcha.php' => config_path('captcha.php')
], 'config');

// HTTP routing
if (strpos($this->app->version(), 'Lumen') !== false) {
$this->app->get('captcha[/{config}]', 'Mews\Captcha\LumenCaptchaController@getCaptcha');
} else {
// $this->app['router']->get('captcha/{config?}', '\Mews\Captcha\CaptchaController@getCaptcha');
// 将上面的代码改成这样
$this->app['router']->get('captcha/{config?}', '\Mews\Captcha\CaptchaController@getCaptcha')->middleware(['web']);
}

// Validator extensions
$this->app['validator']->extend('captcha', function($attribute, $value, $parameters)
{
return captcha_check($value);
});
}
0%