我有以下表单,我想将一些对象传递给内部表单,以便在编辑时用数据填充它们:
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; }
先谢谢!
答案 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) }}