在Symfony表单类型中添加其他未映射的字段

时间:2016-11-07 15:35:17

标签: php forms symfony symfony-forms

我已经向FileType字段添加了一些内容,例如显示有关允许文件大小的信息和适当的预览图像。

现在,我想要实现的是,对于非强制性文件字段,还显示了一个附加(未映射)复选框,允许用户删除现有文件。

首先我尝试了form typ extension。现在我使用专用的表单类型。但是,我无法应付它。

以下是我目前正在做的事情:

  1. 自定义文件类型:

    template<int i> 
    struct Class1{
       void foo(int j)
       {
           if (j%i != 0)
              throw std::invalid_argument("j is not evenly divisible by i");
           std::cout << "j is evenly divisble by i" << std::endl;
       }   
    };
    
    struct Class2
    {
        int j = 4;
        void CallFoo()
        {
            Class1<2> c1;
            c1.foo(j); // works
            j = 3;
            c1.foo(j); // throws
        }
    };
    
  2. 模板:

        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $fieldName = $builder->getForm()->getConfig()->getName();
    
            $builder->add($fieldName, 'Symfony\Component\Form\Extension\Core\Type\FileType', $options);
    
            if ($options['required']) {
                return;
            }
    
            $builder->add($fieldName . 'DeleteFile', 'Symfony\Component\Form\Extension\Core\Type\CheckboxType', [
                'mapped' => false,
                'label' => 'Delete existing file',
                'required' => false,
                'attr' => [
                    'title' => 'Delete this file ?'
                ]
            ]);
        }
    
  3. 目前根本没有显示输入字段(文件字段和复选框都没有显示)。

    对于我做错的更好的方法或指针有任何想法吗?

1 个答案:

答案 0 :(得分:0)

我可以通过替换

来解决这个问题
{{ block('file_widget') }}

通过

<input type="file" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>