扩展EnitityType - 不传递的构造函数参数

时间:2016-08-28 23:46:36

标签: php doctrine-orm symfony

我使用以下类扩展了Symfony \ Bridge \ Doctrine \ Form \ Type \ EntityType

namespace Main\Form\Type;

use /* ... */    

class ExtendedEntityType extends EntityType
{

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
 /* ... */
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults( [
            'invalid_message' => 'The selected entity does not exist',
        ]
    );
}

/**
 * @return string
 */
public function getParent()
{
    return EntityType::class;
}

然后我也将其注册为服务

<services>
    <service id="main.type.Extended_entity" class="Main\Form\Type\ExtendedEntityType">
        <tag name="form.type_extension" extended-type="Symfony\Component\Form\Extension\Core\Type\EntityType"/>
        <argument type="service" id="doctrine"/>
    </service>
</services>

所有我得到的错误都是:

Catchable Fatal Error: Argument 1 passed to Symfony\\Bridge\\Doctrine\\Form\\Type\\DoctrineType::__construct() 
must implement interface Doctrine\\Common\\Persistence\\ManagerRegistry, none given, 
called in \/vagrant\/symfony3-micro\/vendor\/symfony\/symfony\/src\/Symfony\/Component\/Form\/FormRegistry.php

显然由于某种原因,参数不会传递给DoctrineType的构造函数。

我也尝试覆盖构造函数并注入EntityManager但是我得到了同样的错误 - 没有参数传递给构造函数。 我是否需要做一些额外的工作才能使其有效?

使用Symfony3。

1 个答案:

答案 0 :(得分:3)

你在这里混合了两个概念。

您正在延长EntityType,这意味着您已经creating a new custom Form Type了,但是您 making an extension因为您已经<{3}}重新服务映射建议。

这是两个不同的概念。

您应该将服务映射代码从form_extension更改为form_type

<services>
    <service id="main.type.Extended_entity" class="Main\Form\Type\ExtendedEntityType">
        <tag name="form.type" />
        <argument type="service" id="doctrine"/>
    </service>
</services>