我正在尝试在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建议编辑代码
答案 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"
}
}