Форма Symfony2 - данные никогда не привязываются к ней - PullRequest
1 голос
/ 20 июня 2011

У меня есть простая форма в Symfony2 (бета 5), но данные поста никогда не привязываются к форме. Вот мои занятия (для краткости обрезаны):

/**
 * Represents a User
 *
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks()
 */
class User
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @ORM\Column(type="string", unique="true", length="150")
     * @Assert\Email()
     */
    protected $email;

    /**
     * @param string $email
     */
    public function setEmail($email)
    {
        $this->email = $email;
    }

    /**
     * @return string $email
     */
    public function getEmail()
    {
        return $this->email;
    }
}

Форма строителя:

class UserType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('email');
    }
}

Акция:

public function addAction()
{
    $request = $this->getRequest();

    if ($request->getMethod() == 'POST')
    {
        $user = new User();
        $form = $this->createForm(new UserType(), $user);
        $form->bindRequest($request);
print_r($_POST);        // fine - contains an email address
echo 'email: ';
print_r($user->getEmail());              // always empty
        if ($form->isValid())            // never valid
        {
             // ....

Почтовые данные:

array([email] => 'test@test.com')

Что не так с моей настройкой? Это вторая форма, которую я сделал с другой моделью, поэтому я явно что-то делаю не так.

Возможно ли, что я отправляю 'email' в качестве ключа вместо чего-то более сложного, например 'user_email'? Я не предоставил форму - я просто отправляю данные постов вручную, потому что это для веб-службы.

Спасибо

Ответы [ 3 ]

1 голос
/ 20 июня 2011

Вы должны попытаться добавить этот метод в форму UserType:

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'User',
    );
}
1 голос
/ 19 апреля 2012

Используете ли вы конструктор форм для создания формы?Сборка формы ожидает, что имя будет соответствовать определенному формату, а не просто иметь поле email.Обычно вы создаете форму, а затем проверяете, является ли запрос публикацией, если не визуализирует форму в шаблоне.

$form = $this->createForm(new UserType(), $user);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
     $form->bindRequest($request);
     ...
     return...
}
return array('form' => $form->createView());

Затем в своем шаблоне вы используете {{ form_widget(form) }} или связанные функции, которые позволяют вам визуализировать части формы.

1 голос
/ 20 июня 2011

проблема была с моими почтовыми данными.это должно было быть:

array ( [user] => Array ( [email] => test@tests.com ) )
...