无法使用 API 平台保存具有布尔属性的表单数据
Cannot save form data having boolean attribute with API Platform
我正在使用 Symfony4 和 API 平台,API 平台运行良好。
我正在尝试使用 FormType 和 Http 客户端组件 保存数据,但是如果表单具有布尔属性,我会收到此错误:
An exception occurred while executing 'INSERT INTO book (isbn, title, description, author, publication_date, active, price) VALUES (?, ?, ?, ?, ?, ?, ?)' with params ["ISBN 2-7654-1005-8", "Test book", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt u", "Alex", "2020-01-10 16:43:53", null, null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'active' cannot be null
但是如果我从表单中删除属性“active”,数据就会很好地保存在数据库中。
这是 $data 的转储,其中包含表单数据:
这是控制器:
/**
* @Route("/new", name="admin_book_new", methods={"GET", "POST"})
*/
public function new(Request $request)
{
$book = new Book();
$form = $this->createForm(BookType::class, $book);
$form->handleRequest($request);
if ($form->isSubmitted() and $form->isValid()) {
$data = $form->getData();
$this->client->request('POST', $this->getParameter('base_url').'/books', array(
'json' => $data
));
return $this->redirectToRoute('admin_book_index');
}
return $this->render('admin/book/new.html.twig', array(
'form' => $form->createView()
));
}
我是这样解决的:
if ($form->isSubmitted() and $form->isValid()) {
$data = [];
foreach ($form->all() as $field) {
$name = $field->getName();
$value = $field->getData();
$data[$name] = $value;
}
$this->client->request('POST', $this->getParameter('base_url').'/books', array(
'json' => $data
));
return $this->redirectToRoute('admin_book_index');
}
我正在使用 Symfony4 和 API 平台,API 平台运行良好。
我正在尝试使用 FormType 和 Http 客户端组件 保存数据,但是如果表单具有布尔属性,我会收到此错误:
An exception occurred while executing 'INSERT INTO book (isbn, title, description, author, publication_date, active, price) VALUES (?, ?, ?, ?, ?, ?, ?)' with params ["ISBN 2-7654-1005-8", "Test book", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt u", "Alex", "2020-01-10 16:43:53", null, null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'active' cannot be null
但是如果我从表单中删除属性“active”,数据就会很好地保存在数据库中。
这是 $data 的转储,其中包含表单数据:
这是控制器:
/**
* @Route("/new", name="admin_book_new", methods={"GET", "POST"})
*/
public function new(Request $request)
{
$book = new Book();
$form = $this->createForm(BookType::class, $book);
$form->handleRequest($request);
if ($form->isSubmitted() and $form->isValid()) {
$data = $form->getData();
$this->client->request('POST', $this->getParameter('base_url').'/books', array(
'json' => $data
));
return $this->redirectToRoute('admin_book_index');
}
return $this->render('admin/book/new.html.twig', array(
'form' => $form->createView()
));
}
我是这样解决的:
if ($form->isSubmitted() and $form->isValid()) {
$data = [];
foreach ($form->all() as $field) {
$name = $field->getName();
$value = $field->getData();
$data[$name] = $value;
}
$this->client->request('POST', $this->getParameter('base_url').'/books', array(
'json' => $data
));
return $this->redirectToRoute('admin_book_index');
}