IoC绑定到资源丰富的控制器方法,而不是构造函数

时间:2013-11-29 16:06:11

标签: laravel laravel-4 ioc-container

是否可以将实例绑定到laravel 4中的资源控制器的方法参数?

这是一个好主意吗?如果我只有一个方法需要一个对象,是否值得将它作为构造函数参数包含在内?

应用/ routes.php文件

Route::Resource('track', 'TrackController');

应用/控制器/ TrackController.php

class TrackController extends BaseController {
  public function __construct(/Foo/Bar p1, /Foo/Baz p2)
  {
    // All these bindings seem to work
  }

  public function show($id, /Foo/Xyz $xyz)
  {
    // This binding doesn't work, even though the exact same binding
    // in the constructor will work.
  }
}

1 个答案:

答案 0 :(得分:1)

自动分辨率仅适用于构造函数:

当一个类型未绑定在容器中时,它将使用PHP的Reflection工具来检查类并读取构造函数的类型提示。使用此信息,容器可以自动构建类的实例。

在这种情况下你能做的最好的事情可能是:

class TrackController extends BaseController {

    public function __construct(/Foo/Bar p1, /Foo/Baz p2, /Foo/Xyz $xyz)
    {
        $this->xyz = $xyz;
    }

    public function show($id)
    {
        echo $this->xyz->property;
    }

}