【问题标题】:Merging fields Symfony2合并字段 Symfony2
【发布时间】:2015-11-09 10:07:11
【问题描述】:

我的表单类型如下:

class TestType extends AbstractType{

   public function buildForm(FormBuilderInterface $builder, $options){
     $builder->add('type', 'text');
     $builder->add('name', 'text');
   }
}

现在我想创建一个表单类型,其中包含两个 TestTypes,但只有一个 'type' 字段用于其中使用的两个 TestType 字段:

class DoubleTestType extends AbstractType{

   public function buildForm(FormBuilderInterface $builder, $options){
     $builder->add('first', new TestType());
     $builder->add('second', new TestType()); // however this will create one type 'field' for each of the SubForms
   }
}

这种方法将创建两个TestTypes,每个都有一个单独的'type' 字段,但我希望它们之间共享'type' 字段。一种方法是在DoubleTestType 中创建一个'type' 字段,并隐藏TestTypes 中的type 字段,并使用在DoubleTestType 上注册的事件侦听器设置它们的值。我正在寻找一种更清洁的方法来做到这一点。

【问题讨论】:

    标签: forms symfony


    【解决方案1】:

    您可以创建form field type而不是表单类型然后使用它。


    或者你可以通过options参数控制字段:

    public function buildForm(FormBuilderInterface $builder, $options){ 
        $type = isset($options['type']) ? $options['type'] : false; 
        if ($type) { 
            $builder->add('type', 'text');
        }
        $builder->add('name', 'text');
    

    然后:

    $builder->add('first', new TestType(array('type' => true)));
    $builder->add('second', new TestType());
    

    【讨论】:

    • 这就是我现在正在做的事情,问题在于,TestType 字段隐含知道它的父表单 DoubleTestType 不干净。
    • 那么使用自定义表单字段而不是表单类型呢? (我回答的第一部分)
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多