Symfony 4:我无法在我的包构造函数中自动装配

Symfony 4: I can't autowire inside my bundle constructor

我的控制器 PagesController 位于 vendor/dovstone/symfony-blog-admin/src/Controller 包含此代码:

<?php 

//...

class PagesController extends Controller 
{

    private $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
        dump($em) // return null;
    }

    // ...

Symfony 向我抛出这个:Type error: Too few arguments to function DovStone\Bundle\BlogAdminBundle\Controller\PagesController::__construct(), 0 passed in C:\Apps\Web\sf4\vendor\symfony\http-kernel\Controller\ControllerResolver.php on line 111 and exactly 1 expected.

我做错了什么?

在您的本地 Controller 目录中,autowiring/autoconfig 由 Yaml 配置启用。

在包中,您应该在配置中明确列出您的依赖项。这将通过从捆绑包或网桥配置中读取配置来设置。

您显示的目录似乎不是一个包(它没有指示它的名称 - 但它可能仍然有适当的文件),所以如果它是一个简单的包(没有 Symfony定义服务的框架结构),您可能想要添加另一个包,它是一个薄层,从它所依赖的 plain-php 包中提供服务。

这是我所做的:

<?php 

//...

class PagesController extends Controller 
{

protected $container;

private $em;

public function __construct(ContainerInterface $container, EntityManagerInterface $em)
{
    $this->container = $container;

    $this->em = $em;
    dump($em); // EntityManagerInterface;
}

// ...

在此之后,我不得不通过 运行 php bin/console cache:clear

清除缓存