将数据对象传递/绑定到内部/嵌入的 Symfony2 表单

Posted

技术标签:

【中文标题】将数据对象传递/绑定到内部/嵌入的 Symfony2 表单【英文标题】:Pass/bind data objects to inner/embedded Symfony2 forms 【发布时间】:2013-04-15 04:15:33 【问题描述】:

我有以下表格,我想将一些对象传递给内部表格,以便在编辑时用数据填充它们:

 公共函数 __construct( $em, $id )
        
            $this->_em = $em;
        

        公共函数 buildForm(\Symfony\Component\Form\FormBuilderInterface $builder, array $options)
        
            $builder->add( 'accessInfo', new AccessInfoType( $this->_em, $options[ 'entities' ][ 'user' ] ) , array(
                                                                'attr' => 数组('class' => 'input-medium' ),
                                                                '必需' => 假,
                                                                '标签' => 假
                                                             )
            );
            $builder->add( 'profileInfo', new ProfileInfoType( $this->_em, $options[ 'entities' ][ 'profile' ] ) , array(
                                                                '必需' => 假,
                                                                '标签' => 假
                                                             )
            );
        

        公共函数 setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
        
            $resolver->setDefaults($this->getDefaultOptions(array()));
            返回 $resolver->setDefaults(array());
        

        /**
         * @inheritDoc
         */
        公共函数 getDefaultOptions( 数组 $options )
        
            $options = parent::getDefaultOptions( $options );
            $options['entities'] = array();

            返回$选项;
        

        公共函数 getName()
        
            返回“用户类型”;
        

我用以下代码实例化:

$form = $this->createForm( new UserType( $em ), null, array( 'entities' => array( 'user' => $userObj, 'profile' => $profileObj ) ) );  

一旦我通过构造函数获得包含所需数据的对象,有谁知道我如何将该对象绑定到表单?

类 ProfileInfoType 扩展 AbstractType 私人 $_em; 公共函数 __construct($em, $dataObj) $this->_em = $em; $this->_dataObj = $dataObj;

提前致谢!

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,并通过 inherit_data 解决了这个问题

public function configureOptions(OptionsResolver $resolver)

    $resolver->setDefaults(array(
        'inherit_data' => true,
    ));

另见http://symfony.com/doc/current/cookbook/form/inherit_data_option.html

【讨论】:

【参考方案2】:

在你的控制器内部你应该得到请求数据

$request = $this->getRequest();

或者通过方法参数请求

public function newAction(Request $request)

然后将其绑定到表单

$form->bind($request);

更多详情请查看http://symfony.com/doc/2.1/book/forms.html#handling-form-submissions

【讨论】:

谢谢 Michi,也许我解释错了,或者你没有正确理解这个问题。我正在尝试将对象绑定到内部/嵌入式表单,以便让 Symfony2 在模板打印时填充表单。 @user846226 我想我不太明白......你能准确解释一下你想要达到的目标吗......你可能在谈论收藏(symfony.com/doc/2.1/cookbook/form/form_collections.html)。 嗨 Michi,不,我不是在谈论收藏。我创建了一个嵌入其他子表单类型的父表单类型,因为我希望 Symfony2 用数据填充这些嵌套表单我正在寻找一种将数据传递给子表单的方法,现在我正在通过构造函数进行.一旦孩子得到对象来填充表单,我需要进行某种调用来填充表单。现在我正试图通过闭包来完成它symfony.com/doc/current/cookbook/form/use_empty_data.html【参考方案3】:

这很有效,添加一个 attr 以使用 html 属性“值”取决于表单类型,也许这可以帮助你。

树枝

 form_label(blogpostform.title) 
 form_widget(blogpostform.title, 'attr': 'value': titleView ) 
 form_errors(blogpostform.title) 

【讨论】:

以上是关于将数据对象传递/绑定到内部/嵌入的 Symfony2 表单的主要内容,如果未能解决你的问题,请参考以下文章

如何将带有翻译字符串的对象从 symfony 树枝传递到 vue 组件

将 JSON 对象发布到 Symfony 2

将绑定传递给组件中的嵌入范围

如何在 Symfony2 中将 Json 绑定到实体中

最好在 PHP (Symfony 2) 中传递完整的对象或只是一个必需的值?

如何将项目从淘汰赛 foreach 传递到部分视图作为数据绑定?