我在接口和实现之间使用服务提供程序中的绑定:
public function register()
{
$this->app->bind('MyInterface', MyImplementation::class);
}
在我的中间件中,我为请求添加了一个属性:
public function handle($request, Closure $next)
{
$request->attributes->add(['foo' => 'bar]);
return $next($request);
}
foo
public function register()
{
$this->app->bind('MyInterface', new MyImplementation($this->request->attributes->get('foo')); // Request is not available
}
如果设置了request-> attributes-> get('foo'),我正在寻找一种“重新绑定”的技术
答案 0 :(得分:15)
试试这样:
public function register()
{
$this->app->bind('MyInterface', function () {
$request = app(\Illuminate\Http\Request::class);
return app(MyImplementation::class, [$request->foo]);
}
}
绑定元素的工作原理是只有在调用它们时才会触发它们。
答案 1 :(得分:1)
在service provider
中,您还可以通过以下方式访问Request Object
:
public function register()
{
$request = $this->app->request;
}
答案 2 :(得分:0)
尝试一下
public function register()
{
$this->app->bind('MyInterface', function ($app) {
return new MyImplementation(request()->foo);
}
}