Symfony 2.3 handleRequest($ request)不设置实体

时间:2014-11-13 15:01:06

标签: php validation symfony

我已联系实体,使用以下方式拨打电话:

postContactAction(Request $request)

使用app/console generate:doctrine:form BundleName:Contact

生成的表单

在post函数中尝试获取请求并设置实体以请求名称,电子邮件等参数:

$contact = new Contact();
$form = $this->createForm(new ContactType(), $contact, array(
    'method' => 'POST'));
$form->handleRequest($request);

在检查时,var_dump($contact);返回空值的字段。

可能是什么问题?

使用邮递员发送邮件请求,但没有表格。

在ContactType中:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', 'text')
            ->add('email', 'text', array('required' => false))
            ->add('phone', 'integer', array('required' => false))
            ->add('text', 'textarea')
            ->add('subject', 'text')
            ->add('createdAt', 'datetime', array('required' => false))
        ;
    }

在ContactController中:

public function postContactAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $this->initErrorContainer();
        $validator = $this->get('validator');

        $contactDetails = $this->getRequest()->request->all();

        // check if email and phone exists or not. One is enough
        if (!array_key_exists('email', $contactDetails) && !array_key_exists('phone', $contactDetails)) {
            $this->errorContainer->createAndAdd('email', $this->errorContainer->MESSAGE_REQUIRED);
            $this->errorContainer->createAndAdd('phone', $this->errorContainer->MESSAGE_REQUIRED);
            return $this->getView();
        }

        $contact = new Contact();

        // handle form
        $form = $this->createForm(new ContactType(), $contact, array(
            'method' => 'POST'));
        $form->handleRequest($request);

        // set default values
        var_dump($contact);
        die;

2 个答案:

答案 0 :(得分:0)

很奇怪,但你可以在调用createForm之后尝试获取表单,看看是否有相关内容,即: 你有:

$form = $this->createForm(new ContactType(), $contact, array('method' => 'POST'));

然后添加:

$form = $this->createForm(new ContactType(), $contact, array('method' => 'POST'))->getForm();

答案 1 :(得分:0)

解决。由于Entity使用与请求不同的类型,您需要创建该实体的简单模型,使用handleRequest将请求字段设置为该实体类型,然后您可以使用它。