Laravel使用DI通过构造函数扩展类

Laravel使用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(

我已经创建了一个小型CRUD控制器,我需要在这个CRUD控制器的_construct()中注入FormBuilder

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我不知道。这就是我想要的,谢谢