验证表单失败,但不会出现错误


Validating a form fails but gives no errors

我正试图在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"
    }]
}

我想我错过了显而易见的东西。有人能帮我做这件事吗?

UPDATE使用Alvin Bunk建议编辑代码

创建表单的方式看起来很奇怪,但我理解它(它可能会…(,但不如试试这个:

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

试试看会发生什么。您是否也尝试过"app_dev.php"URL,看看它是否显示了更多信息?

编辑#2…

我认为您的JSON是错误的。应该是这样的:

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