Symfony2 MongoDB 中的表单

Posted

技术标签:

【中文标题】Symfony2 MongoDB 中的表单【英文标题】:Forms in Symfony2 MongoDB 【发布时间】:2013-08-14 17:11:50 【问题描述】:

我为会员开设了这个课程:

class Member 
/**
 * @ODM\Id
 */
protected $id;

/**
 * @ODM\String
 */
protected $fName;

/**
 * @ODM\String
 */
protected $lName;

/**
 * @ODM\String
 */
protected $email;


/**
 * @ODM\String
 */
protected $password;

//getters & setters

public function __toString()

    return $this->getFName().$this->getLName();

这个 FormType 是它的形式:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class MemberType extends AbstractType

    public function buildForm(FormBuilderInterface $builder, array $options)
    
        $builder
            ->add('fName', 'text')
            ->add('lName', 'text')
            ->add('password', 'password')
            ->add('email', 'email')
            ->add('sigIn', 'submit');
        $builder->add('terms', 'checkbox', array('property_path' => 'termsAccepted'));
    

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    
        $resolver->setDefaults(array(
            'data_class' => 'Acme\MainBundle\Document\Member',
        ));
    

    public function getName()
    
        return 'member';
    

在控制器中,我使用它来呈现表单:

public function indexAction()

    $form = $this->createForm(new MemberType(), 'member');

    return $this->render('AcmeMainBundle:Default:index2.html.twig',
        array('register'=>$form->createView()));

它看起来可以工作,但是当我检查它时,我在浏览器中看到了这个错误:

The form's view data is expected to be an instance of class
Prexter\MainBundle\Document\Member, but is a(n) string. You can avoid this error
by setting the "data_class" option to null or by adding a view transformer that
transforms a(n) string to an instance of Prexter\MainBundle\Document\Member.

我已将 data_class 设置为 null,但没有任何改变!请帮助...

【问题讨论】:

【参考方案1】:

您应该传递Member 的实例作为Controller#createForm() 的第二个参数,而不是字符串“member”。例如:

$form = $this->createForm(new MemberType(), new Member());

【讨论】:

以上是关于Symfony2 MongoDB 中的表单的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2:使用 FOSUserBundle 时如何在控制器内获取用户对象?

Symfony2 Doctrine ODM 嵌入类表单验证

未处理模态中的 Symfony2 表单

从 Symfony2 中的控制器访问集合表单字段

翻译 Symfony2 类表单中的选择选项

symfony2 中的 Ajax 表单提交,为没有 javascript 的用户提供优雅的降级