Laravel 5从包服务提供商中注册中间件

Jor*_*cht 14 php package service-provider laravel-5 laravel-middleware

我正在为Laravel 5开发一个软件包.
我的软件包包含一个自定义中间件,我想将它添加到$routeMiddleware我的软件包服务提供程序中的Kernel类的数组中.
但我似乎找不到办法做到这一点.

我试图创建一个扩展Kernel类的自定义类,然后我可以将数组与我的数组合并.
但是一旦出了构造函数就不可能了.

在L4中你有App :: middleware,但L5中不再提供该功能.

任何解决过这个问题的人都可以帮我解决这个问题吗?

请告诉我,如果我的问题不够明确,那么我可以稍微澄清一下.

mit*_*dav 21

对于那些寻找更新答案的人,在Laravel 5.4中,您可以从服务提供商处拨打以下内容.

$this->app['router']->aliasMiddleware('my-package-middleware', \My\Package\Middleware::class);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用app()帮助程序,如下所示.

app('router')->aliasMiddleware('my-package-middleware', \My\Package\Middleware::class);
Run Code Online (Sandbox Code Playgroud)


Jor*_*cht 14

在您的包服务提供商中,您可以像这样访问路由器实例:

$this->app['router']
Run Code Online (Sandbox Code Playgroud)

接下来你可以像这样注册中间件:

$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass');
Run Code Online (Sandbox Code Playgroud)

您将此代码放在服务提供商的注册方法中.


小智 9

关于Laravel 5.6

/*In your package service provider*/
public function boot()
{
    /** @var Router $router */
    $router = $this->app['router'];
    $router->pushMiddlewareToGroup('web', MyPackage\Middleware\WebOne::class);
}
Run Code Online (Sandbox Code Playgroud)