我正在为Laravel 5开发一个包。
我的软件包包含一个自定义中间件,我想将它添加到我的软件包服务提供商的内核类的$routeMiddleware
数组中。
但我似乎找不到办法做到这一点。
我尝试创建一个扩展Kernel类的自定义类,然后我可以将数组与我的数组合并 但是一旦出了构造函数就不可能了。
在L4中你有App :: middleware,但L5中不再提供该功能。
任何解决过这个问题的人都可以帮我解决这个问题吗?
请告诉我,如果我的问题不够明确,那么我可以稍微澄清一下。
答案 0 :(得分:18)
自从Laravel 5.4(测试高达5.8)以来,您将从服务提供商处拨打以下行。
$this->app['router']->aliasMiddleware('my-package-middleware', \My\Package\Middleware::class);
或者您可以使用app()帮助程序,如下所示。
app('router')->aliasMiddleware('my-package-middleware', \My\Package\Middleware::class);
答案 1 :(得分:14)
在您的包服务提供商中,您可以像这样访问路由器实例:
$this->app['router']
接下来,您可以注册这样的中间件:
$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass');
将此代码放在服务提供商的注册方法中。
答案 2 :(得分:4)
这是关于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);
}
答案 3 :(得分:0)
您可以通过以下两种方式执行此操作:
让我们首先在你的src包文件夹中通过create
你的TestMiddleware.php文件尝试并将它放在某处,在我的情况下,我把它放在Middle-ware
文件夹中,然后将它添加到你的作曲家。像这样的json自动加载器:
"autoload": {
"psr-4": {
"Vendor\\Package\\Middleware": "packages/Vendor/Package/src/Middleware"
}
}
编写一般的中间件:
namespace Vendor\Package\Middleware;
class TestMiddleware {
public function handle( $request, Closure $next ) {
echo 'hello, world!';
}
}
然后将中间件添加到您的主项目中间件中,在Lumen中,您应该像这样添加:
$app->middleware([
Vendor\Package\Middleware\TestMiddleware::class
]);
将中间件添加到包服务提供商
第二种方法,创建中间件并在自动加载器中加载它,如上例所示,然后创建服务提供者并在引导方法中注册中间件:
public function boot()
{
$this->app->middleware([
\Vendor\Package\Middleware\TestMiddleware::class
]);
}
最后,您应该在主项目中注册您的服务提供商(Lumen示例)
$app->register(Vendor\Package\TestServiceProvider::class);
答案 4 :(得分:-1)
有两种注册软件包中间件的方法。
第一种方法是使用以下方法将中间件推入现有的中间件组:
$this->middlewareGroup($group_name, $middleware_list)
另一种方法是注册自定义中间件并将您的中间件分配给该组。
$this->pushMiddlewareToGroup(*string* $group_name, $middleware_list)
您可以在下面的链接中了解更多信息
中间件组:
https://laravel.com/api/5.5/Illuminate/Routing/Router.html#method_middlewareGroup
pushMiddlewareToGroup: https://laravel.com/api/5.5/Illuminate/Routing/Router.html#method_pushMiddlewareToGroup
答案 5 :(得分:-1)
流明的解决方案:
$this->app->middleware($middleware);