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

时间:2013-04-22 09:50:51

标签: symfony symfony-forms

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

        public function __construct( $em, $id )
        {
            $this->_em = $em;
        }

        public function buildForm( \Symfony\Component\Form\FormBuilderInterface $builder, array $options )
        {        
            $builder->add( 'accessInfo', new AccessInfoType( $this->_em, $options[ 'entities' ][ 'user' ] ) , array(
                                                                'attr'  => array( 'class' => 'input-medium' ),
                                                                'required'      => false,
                                                                'label'         => false
                                                             )
            );
            $builder->add( 'profileInfo', new ProfileInfoType( $this->_em, $options[ 'entities' ][ 'profile' ] ) , array(
                                                                'required'      => false,
                                                                'label'         => false
                                                             )
            );
        }

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

        /**
         * {@inheritDoc}
         */
        public function getDefaultOptions( array $options )
        {
            $options = parent::getDefaultOptions( $options );
            $options[ 'entities' ]   = array();

            return $options;
        }

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

我使用以下代码实例化:

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

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

class ProfileInfoType extends AbstractType
{
    private $_em;

    public function __construct( $em, $dataObj )
    {
        $this->_em = $em;
        $this->_dataObj = $dataObj;
    }

先谢谢!

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

$request = $this->getRequest();

或通过方法参数

请求它
public function newAction(Request $request)

然后将其绑定到表单

$form->bind($request);

有关详细信息,请查看http://symfony.com/doc/2.1/book/forms.html#handling-form-submissions

答案 2 :(得分:0)

这样可以很好地添加一个attr来使用html属性' value'取决于表单类型,也许这可以帮助你。

枝条

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