没有错误的symfony2表单无效

时间:2016-01-20 01:37:41

标签: symfony

我的控制器在扩展BaseController时有以下代码,这似乎不起作用,但我无法看到一个不错的错误:

    $responseFormatter = $this->getResponseFormatter();
    $entity = new POI();
    $form = $this->createForm(new POIType(), $entity);
    $form->handleRequest($request);
    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $responseFormatter->successfullResponseFormat($entity)->getResponse();
    }

    $errors = $this->formErrorFormatter($form);

    return $responseFormatter->badResponseFormat('entity.error', $errors)->getResponse();

我甚至尝试过$ form-> getErrors(true)的解决方案; ,并且在我返回时它是空的,所以这篇文章(Symfony2 invalid form without errors)还没有解决我的问题。

由于

3 个答案:

答案 0 :(得分:1)

这些也可能是无效的原因之一。

第一:无效的方法

在`HttpFoundationRequestHandler

    $name = $form->getName();
    $method = $form->getConfig()->getMethod();

    if ($method !== $request->getMethod()) {
        return;
    }

表单已提交状态为false

这使您的表单无法提交。如果表单的状态未提交,则也无效。 errors不仅会使您的表单成为invalid。以下代码演示了它。

内部isValid功能

public function isValid()
{
    if (!$this->submitted) {
        return false;
    }

    if ($this->isDisabled()) {
        return true;
    }

    if (count($this->getErrors(true)) > 0) {
        return false;
    }

    return true;
}

答案 1 :(得分:0)

请尝试这个

$responseFormatter = $this->getResponseFormatter();
    $entity = new POI();
    $form = $this->createForm(new POIType(), $entity);
    $form->handleRequest($request);

    $form->isValid();
    $form->getErrorsAsString();
    exit;

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $responseFormatter->successfullResponseFormat($entity)->getResponse();
    }

    $errors = $this->formErrorFormatter($form);

    return $responseFormatter->badResponseFormat('entity.error', $errors)->getResponse();

如果验证期间出现任何错误消息,我希望getErrorsAsString()函数显示错误。

答案 2 :(得分:0)

或者您忘了模板中的the following了吗?

{{ form_start(form) }}

如果没有,您如何呈现表单?