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
清除缓存
我的控制器 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