【问题标题】:Symfony 4: I can't autowire inside my bundle constructorSymfony 4:我无法在我的 bundle 构造函数中自动装配
【发布时间】:2018-08-06 17:12:11
【问题描述】:

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

<?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

我做错了什么?

【问题讨论】:

  • 复制/粘贴 config/services.yaml 文件的 App\Controller\ 部分,然后编辑以指向您的博客包。但这将是一个真正的黑客。您的 BlogAdminBundle 应该有一个 DI 扩展来负责创建您的博客服务。这一切都在文档中。

标签: php symfony service entitymanager symfony4


【解决方案1】:

在您的本地 Controller 目录中,自动装配/自动配置由 Yaml 配置启用。

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

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

【讨论】:

  • 我终于找到了配置我的包的方法。有用!谢谢!
  • 愿意分享@dovstone?
【解决方案2】:

这是我所做的:

<?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来清除缓存

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多