Symfony2表单 - 数据从未绑定到它

时间:2011-06-19 20:59:11

标签: symfony symfony-forms

我在Symfony2(beta 5)中有一个简单的表单,但是post数据从不绑定到表单。这是我的课程(为简洁而修剪):

/**
 * 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')

我的设置有什么问题?这是我用不同模型制作的第二种形式,所以我显然做错了。

或许我发布'电子邮件'作为关键,而不是像'user_email'那样更精细的东西?我没有呈现表单 - 我只是手工提交帖子数据,因为这是用于Web服务。

由于

3 个答案:

答案 0 :(得分:1)

问题在于我的帖子数据。应该是:

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

答案 1 :(得分:1)

您应该尝试在UserType表单中添加此方法:

public function getDefaultOptions(array $options)
{
    return array(
        'data_class' => 'User',
    );
}

答案 2 :(得分:1)

您是否使用表单构建器来创建表单?表单构建期望名称遵循特定格式,而不仅仅是email字段。您通常会创建表单,然后检查请求是否为Post,如果不在模板中呈现表单。

$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) }}或允许您呈现表单部分的相关函数。