php – 如何将模型转换器应用于Symfony2表单中的集合项?
发布时间:2020-05-25 09:23:31 所属栏目:PHP 来源:互联网
导读:背景是 我有一个类型集合的Symfony2表单字段,其中集合项是实体类型.我使用Symfony 2.7. 问题是 到目前为止它可以工作,但在这种情况下,我必须将模型数据转换器应用于那些集合项,如in the Symfony Cookbook所述.我使用此代码片段: ?php$builder -add( $builder
|
背景是 我有一个类型集合的Symfony2表单字段,其中集合项是实体类型.我使用Symfony 2.7. 问题是 到目前为止它可以工作,但在这种情况下,我必须将模型数据转换器应用于那些集合项,如in the Symfony Cookbook所述.我使用此代码片段: <?php
$builder
->add(
$builder
->create('items','collection',array(
'type' => 'entity','options' => array(
'class' => 'AppBundle:Item','property' => 'name','label' => 'Item',),'label' => 'Items','allow_add' => true,'allow_delete' => true,'delete_empty' => true,'prototype' => true,'required' => false,))
// $options['em'] is the entity manager
->addModelTransformer(new ItemToNumberTransformer($options['em']))
)
;
不幸的是,这会将模型转换器应用于整个集合,而不是它的一个Item项.作为一种解决方法,我修改了变换器以使用项目/ ID的数组而不是仅使用单个项目/ id,但是这种类似于处理它的错误位置.在我看来好像这更像是一个语法问题. 问题是 有人知道如何将模型变换器应用于集合的每个项目吗?或者任何人都证实,由于Symfony框架中的限制,这根本不可能实现? 我要说的是,您需要创建自己的类型,而不是创建实体类型的集合.namespace AppBundleFormType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;
use DoctrineORMEntityManager;
/* Other use statements */
class ItemEntityType extends AbstractType
{
/**
* @var DoctrineORMEntityManager
*/
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em
}
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder->addModelTransformer(new ItemToNumberTransformer($this->em));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'class' => 'AppBundle:Item','label' => 'Item',));
}
public function getParent()
{
return 'entity';
}
public function getName()
{
return 'appbundle_item_entity';
}
}
然后将其定义为服务 应用程序/配置/ services.yml services:
form.type.model.item_entity:
class: AppBundleFormTypeItemEntityType
arguments: ["@doctrine.orm.entity_manager"]
tags:
- {name: form.type,alias: appbundle_item_entity}
现在,您可以将其指定为集合的类型 $builder
->create('items',array(
'type' => 'appbundle_item_entity'
'label' => 'Items',))
披露:我没有测试过这个,但它应该有效. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
