我目前正在尝试将一个类的依赖注入到另一个类中。 我试图将其基于Symfony2文档中有关Newsletter / Mailer的示例。 我目前收到此错误:
Catchable Fatal Error:
Argument 1 passed to Me\MyBundle\Resources\component\SecondClass::__construct()
must be an instance of Me\MyBundle\Resources\component\FirstClass\FirstClass,
none given
MyBundle.php
namespace Me\MyBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
use Resources\component\FirstClass;
use Resources\component\SecondClass;
class MeMyBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container
->register('first_class', 'FirstClass');
$container
->register('second_class', 'SecondClass')
->addArgument(new Reference('first_class'));
}
}
/Resources/component/FirstClass.php
<?php
namespace Me\MyBundle\Resources\component;
class FirstClass
{
....
}
/Resources/component/SecondClass.php
<?php
namespace Me\MyBundle\Resources\component;
class SecondClass {
private $firstClass;
public function __construct ( FirstClass\FirstClass $firstClass ) {
$this->firstClass = $firstClass;
}
....
关于哪里出错的任何想法?我得到的印象是新的Reference('first_class')没有传递任何东西。 我假设,使用上面的方法,没有什么需要添加到我的services.yml
感谢。
更新:(这是我必须做的,让它发挥作用)
MyBundle.php
$container
->register('first_class', 'Me\MyBundle\Resources\component\FirstClass');
$container
->register('second_class', 'Me\MyBundle\Resources\component\SecondClass')
->addArgument(new Reference('first_class'));
SecondClass.php
public function __construct ( LanguageCodes $langCodes )
这主要是与名称空间的斗争。
感谢Cerad的耐心,我终于把它分类了。
答案 0 :(得分:0)
为什么你有这个:
$container = new ContainerBuilder(); ?
$ container作为参数传递。而且我怀疑你没有使用容器来获取物体。
你在某处做这件事:
$instance = $this->container->get('second_class");
或者你在尝试:
$instance = new SecondClass();