验证表单失败但没有错误

时间:2016-06-27 17:46:11

标签: php symfony-forms symfony

我正在尝试在Symfony3中创建一个没有类的表单。不幸的是,虽然验证失败了,但根本没有给我任何消息 - 只是一个emtpy字符串。

public function postCollectionAction(Request $request)
{
    $data = json_decode($request->getContent(), true);

    $options = ["csrf_protection" => false];

    $form = $this->createFormBuilder([], $options)
        ->add('elements', CollectionType::class,
            [
                'entry_type'   => MyClassType::class, //this should be form type
                'allow_add' => true, // this needs to be true
            ]
        )
        ->getForm();

        $form->submit($data); // This was the main problem - form did not get submitted

    $form->handleRequest($request);

    if ($form->isValid()) {
        die("ok");
    }
    else
    {
        var_dump((string)$form->getErrors(true, false));
        die("not ok");
    }
}

我尝试验证的课程看起来像这样

use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Table
 */
class MyClass
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, unique=true)
     * @Assert\NotBlank()
     */
    private $name;
}

这就是我发送的内容

{
    "elements": [{
        "name": "My element name"
    }]
}

我想我错过了显而易见的事实。有人可以帮我做这个工作吗?

更新使用Alvin Bunk建议编辑代码

1 个答案:

答案 0 :(得分:0)

您创建该表单的方式看起来很奇怪,但我理解它(它可能会起作用......),但是尝试这样做会怎么样:

$form = $this->createFormBuilder(null, $options)
    ->add('elements', CollectionType::class, array(
            'entry_type'   => MyClass::class,
    ))
    ->getForm();

尝试一下,看看会发生什么。 您是否也尝试了app_dev.php'用于查看是否显示更多信息的网址?

编辑#2 ...

我认为你的JSON错了。 应该是这样的:

{
    "elements": {
        "name": "My element name"
    }
}