【问题标题】:Best Practice Access Request in Service Provider After Applying Middleware服务提供者应用中间件后的最佳实践访问请求
【发布时间】:2018-12-21 02:51:35
【问题描述】:

我已经找到了应用中间件后如何在Service Provider中访问请求

的答案
$request = app(\Illuminate\Http\Request::class); 

Access Request in Service Provider After Applying Middleware

但这是一个好习惯吗?有没有更好的方法来访问 appServiceProvider 中的请求正文? 谢谢。

【问题讨论】:

  • 乍一看你可能在这里没问题,因为你只是给你的实现提供了它需要的数据,而不是请求本身(我已经这样做了,它使测试变得相当困难)。尽管您可以使用 request() 帮助器减少打字次数。

标签: php laravel laravel-5 request


【解决方案1】:

几乎所有服务容器绑定都将在服务提供者中注册,因此这些示例中的大多数将演示在该上下文中使用容器。

如果类不依赖于任何接口,则无需将类绑定到容器中。不需要指示容器如何构建这些对象,因为它可以使用反射自动解析这些对象。

简单绑定

在服务提供者中,您始终可以通过$this->app 属性访问容器。我们可以使用bind 方法注册绑定,传递我们希望注册的类或接口名称以及返回类实例的Closure

$this->app->bind('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});

请注意,我们接收容器本身作为解析器的参数。然后我们可以使用容器来解决我们正在构建的对象的子依赖关系。

绑定单例

单例方法将一个类或接口绑定到只应解析一次的容器中。一旦解决了单例绑定,相同的对象实例将在随后对容器的调用中返回:

$this->app->singleton('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2022-08-13
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多