如何在将参数传递给`make`时使用Laravel的自动构造函数注入?

时间:2014-09-15 05:51:21

标签: laravel ioc-container

我有一个名为GeneralReport的类,它有两个构造函数参数:

public function __construct(array $input, GeneralReportQueryBuilder $builder)

一个是输入数组(控制器可以传递),另一个是GeneralReportQueryBuilder我希望Laravel自动传入。问题是,如果我将参数传递给make,就像这样:

App::make('generalReport', [$input]);

然后第二个参数,一个GeneralReportQueryBuilder的实例,不会自动由Laravel的IOC Container传递。

我怎样才能做到这一点?我不希望用户必须手动实例化并传递此依赖关系。

1 个答案:

答案 0 :(得分:0)

我发现问题在于我的设计。

传递给构造函数的参数应该只是依赖项 - 没有它的对象,这个类将不起作用。但是,由于我使用的是单一责任原则,并且我只有一个公共方法(称为calculate()),因此我失去了这些参数的正确位置。换句话说,由于这个对象有一个输入数组并对它们起作用,所以数组看起来像是一个依赖,但实际上并非如此;它仅仅是它的名字所暗示的:输入。

因此,传递$input参数的正确位置直接指向calculate()方法,而不是构造函数。

所以,我把构造函数改为:

public function __construct(GeneralReportQueryBuilder $builder)

我将calculate()功能签名更改为:

public function calculate(array $input)

纯!