我认为这应该很容易,但我正在努力弄清楚它应该如何运作。
我有一个使用依赖项的类。我需要能够从控制器动态设置依赖项的参数:
$objDependency = new MyDependency();
$objDependency->setSomething($something);
$objDependency->setSomethingElse($somethingElse);
$objMyClass = new MyClass($objDependency);
我如何通过Laravel中的服务容器实现这一目标?这是我尝试过的,但这对我来说似乎不对。在我的AppServiceProvider中:
$this->app->bind('MyClass', function($app,$parameters){
$objDependency = new MyDependency();
$objDependency->setSomething($parameters['something']);
$objDependency->setSomethingElse($parameters['somethingElse']);
return new MyClass($objDependency);
}
然后在控制器中我会使用它:
$objMyClass = App:make('MyClass', [
'something' => $something,
'somethingElse' => $somethingElse
]);
它是否正确?有没有更好的方法可以做到这一点?
谢谢
你可以在这里看到详细的文档:https://laravel.com/docs/5.6/container#the-make-method
它是这样完成的:
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);
或者使用app()帮助器
$api = app()->makeWith(HelpSpot\API::class, ['id' => 1]);
注意:如果您使用它进行模拟,makeWith不会返回Mockery实例。
你也可以这样做:
$this->app->make(SomeClass::class, ["foo" => 'bar']);