symfony - 从嵌套表单中调用 $builder->getData() 始终返回 NULL

标签 symfony symfony-forms symfony-2.3

我试图获取以嵌套形式存储的数据,但在调用 $builder->getData() 时,我总是得到 NULL。

有谁知道如何获取嵌套表单中的数据?

这是 ParentFormType.php:

class ParentFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('files', 'collection', array(
            'type'          => new FileType(),
            'allow_add'     => true,
            'allow_delete'  => true,
            'prototype'     => true,
            'by_reference'  => false
        );
    }
}

文件类型.php

class FileType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Each one of bellow calls returns NULL
        print_r($builder->getData());
        print_r($builder->getForm()->getData());
        die();

        $builder->add('file', 'file', array(
            'required'    => false,
            'file_path'   => 'file',
            'label'       => 'Select a file to be uploaded',
            'constraints' => array(
                new File(array(
                    'maxSize' => '1024k',        
                ))
            ))
        );
    }

    public function setDefaultOptions( \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver )
    {
        return $resolver->setDefaults( array() );
    }

    public function getName()
    {
        return 'FileType';
    }
}

谢谢!

最佳答案

您需要使用 FormEvents::POST_SET_DATA 来获取表单对象:

        $builder->addEventListener(FormEvents::POST_SET_DATA, function ($event) {
            $builder = $event->getForm(); // The FormBuilder
            $entity = $event->getData(); // The Form Object
            // Do whatever you want here!
        });

关于symfony - 从嵌套表单中调用 $builder->getData() 始终返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21862168/

相关文章:

带有命名 Assets 的 Symfony Assets ,在生产环境中转储两次?

symfony - FOSUserBundle 反序列化为用户对象抛出 "you must define a type"

symfony - FOSUserBundle 不使用 trans_default_domain 进行翻译

jquery - 在 Controller 中获取 json 答案

php - Symfony Compiler Pass - 我需要实现优先级还是已经实现了

symfony - 如何从 Controller 动态设置表单的级联验证

symfony-forms - 如何将参数从 Controller 传递给FormType构造函数

symfony - 数据库翻译与学说

symfony - 如何在 Symfony 中对实体类型字段进行排序(不使用 query_builder 选项)?

Symfony 表单标签渲染