Laravel使用DI通过构造函数扩展类
我已经创建了一个小型CRUD控制器,我需要在这个CRUD控制器的_construct()中注入FormBuilderLaravel使用DI通过构造函数扩展类,laravel,dependency-injection,Laravel,Dependency Injection,我已经创建了一个小型CRUD控制器,我需要在这个CRUD控制器的_construct()中注入FormBuilder class CrudController extends Controller { private $formBuilder; /** * CrudController constructor. * @param FormBuilder $formBuilder */ public function __construct(
class CrudController extends Controller
{
private $formBuilder;
/**
* CrudController constructor.
* @param FormBuilder $formBuilder
*/
public function __construct(FormBuilder $formBuilder)
{
$this->middleware('auth');
$this->formBuilder = $formBuilder;
// ....
我的问题是:我可以扩展这个类而不向每个子类注入FormBuilder
?目前我有:
class LevelsCrudController extends CrudController
{
public function __construct(FormBuilder $formBuilder)
{
parent::__construct($formBuilder);
// .....
这真的很重要,有什么解决方法吗?如果您不想在子控制器的构造中有一个
FormBuilder$FormBuilder
,只有在调用父控制器的构造时,您才能将其作为参数传递,如下所示:
parent::__construct(resolve(FormBuilder::class));
class CrudController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->formBuilder = resolve(FormBuilder::class);
// ...
}
}
否则,您可以从父构造函数中完全删除它,并在父构造函数中解析它,如下所示:
parent::__construct(resolve(FormBuilder::class));
class CrudController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->formBuilder = resolve(FormBuilder::class);
// ...
}
}
然后在您的孩子身上,您可以简单地呼叫:
public function __construct()
{
parent::__construct();
// ...
}
你需要在你的
LevelsCrudController的
构造中做些什么吗?@ChinLeung是的,我为父级($title,$uri…)设置了所有变量真的很好的答案,我习惯了Symfony,我可以通过services.yaml注入,但在Laravel我不知道。这就是我想要的,谢谢