我使用以下类扩展了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。
答案 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>