Формы в Symfony2 MongoDB

У меня есть этот класс для члена:

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()вместо строки "член". Например:

$form = $this->createForm(new MemberType(), new Member());
Другие вопросы по тегам