Laravel 5.1注册包中间件


Laravel 5.1 Register Package Middleware

我正在为我的定制包开发一些中间件。然而,为了使用这些包中间件,我必须手动将其添加到kernel.php文件到$routeMiddleware。所以现在,每次使用我的包时,我都必须手动添加这几行额外的代码。

'login.auth' => 'Vendor'Package'http'middleware'loginAuth::class,
'login.guest' => 'Vendor'Package'http'middleware'loginGuest::class,
'login.permission' => 'Vendor'Package'http'middleware'loginPermission::class,

该列表可能随着包的增长而变长。我怎样才能有更好的方式注册包中间件,而不需要手动注册所有它们到$routeMiddleware ?

要添加基于路由的中间件,请在您的包服务提供商(引导方法)中执行此操作。

public function boot('Illuminate'Routing'Router $router)
{
    $router->middleware('name', 'MiddlewareClass');
}

同样,对于不基于路由的中间件,类Illuminate'Foundation'Http'Kernel有这两个您可以调用的公共方法:

/**
* Add a new middleware to beginning of the stack if it does not already exist.
*
* @param  string  $middleware
* @return $this
*/
public function prependMiddleware($middleware)
/**
* Add a new middleware to end of the stack if it does not already exist.
*
* @param  string  $middleware
* @return $this
*/
public function pushMiddleware($middleware)

对于laravel 5.4及以上版本,使用:

public function boot('Illuminate'Routing'Router $router)
{
    $router->aliasMiddleware('name', 'MiddlewareClass');
}