如何在`collection`字段Symfony 2.1中将选项传递给CustomType?

Posted

技术标签:

【中文标题】如何在`collection`字段Symfony 2.1中将选项传递给CustomType?【英文标题】:How to pass options to CustomType in `collection` field Symfony 2.1? 【发布时间】:2013-03-06 22:04:31 【问题描述】:

我有SuperType 实体Super 的表单。

在这个表单中,我有一个 collection 字段 ChildType 实体 Child 的表单类型

class SuperType:

public function buildForm(FormBuilderInterface $builder, array $options)

    $builder->add('childrens', 'collection', array(
            'type' => new ChildType(null, array('my_custom_option' => true)),  

class ChildType:

public function buildForm(FormBuilderInterface $builder, array $options)

    if ($options['my_custom_option']) 
        $builder->add('my_custom_field', 'textarea'));
    


public function setDefaultOptions(OptionsResolverInterface $resolver)

  $resolver->setDefaults(array(
      ...
      'my_custom_option' => false
  ));

如何仅更改此 SuperType 表单的 my_custom_option 值?

当然,我尝试通过构造函数传递此选项的方法不起作用。

【问题讨论】:

在这里留下一个link 解决同样的问题 【参考方案1】:

您可以将array of options 传递给您的childType,如下所示:

public function buildForm(FormBuilderInterface $builder, array $options)

    $builder->add('childrens', 'collection', array(
            'entry_type' => new ChildType(),  
            'entry_options'  => array(
                'my_custom_option' => true,
            ),
    // ...


【讨论】:

考虑更新您的答案,因为现在已弃用【参考方案2】:

在 Symfony 3 中,这称为entry_options。

$builder->add('childrens', CollectionType::class, array(
    'entry_type'   => ChildType::class,
    'entry_options'  => array(
        'my_custom_option'  => true
    ),
));

【讨论】:

以上是关于如何在`collection`字段Symfony 2.1中将选项传递给CustomType?的主要内容,如果未能解决你的问题,请参考以下文章

sonata_type_collection 字段仅适用于现有的父对象

Symfony 4.4如何使用collectionType从0个字段开始

在 Symfony 中,如何翻译实体中的关联字段(外键)?

如何在 Symfony2 中使用 setter 设置表单字段值

Symfony2 - 如何阻止 Form->handleRequest 清空帖子数据中不存在的字段

在 Symfony 中保存数据库时如何保留 updated_at 日期字段?