我的Symfony2 FormType中有一个onPreSubmit。
public function onPreSubmit(FormEvent $event)
{
$data = $event->getData();
// Avoid sending empty RegisterProduct
foreach ($data['registerProducts'] as $key => $registerProduct) {
if (empty($registerProduct['quantity'])) {
unset($data['registerProducts'][ $key ]);
}
}
$event->setData($data);
}
目的是删除一个数组值,如果这个中的某个fiels为空(有效)
但是当我设置数据时,我有这个错误:
An exception occurred while executing 'INSERT INTO register_product .....
Integrity constraint violation: 1048 Column 'register_id' cannot be null
我不明白为什么。
编辑:我尝试使用onPostSubmit,但仍然有相同的错误
public function onPostSubmit(FormEvent $event)
{
/** @var Register $register */
$register = $event->getForm()->getData();
foreach ($register->getRegisterProducts() as $registerProduct) {
if ($registerProduct->getQuantity() < 1) {
$register->removeRegisterProduct($registerProduct);
}
}
}
答案 0 :(得分:1)
正如评论中所说,您应该在postSubmit
而不是preSubmit
中执行此操作。
示例:
public function onPostSubmit(FormEvent $event) {
$data = $event->getData();
foreach ($data['registerProducts'] as $key => $registerProduct) {
if (empty($registerProduct['quantity'])) {
unset($data['registerProducts'][$key]);
}
}
});
如果SQL错误仍然存在,请尝试将$event->getData()
替换为$event->getForm()->getData()
,第一个从客户端返回数据。
修改强>
不幸的是,FormEvent不起作用。
另外,我建议在你的实体中使用prePersist和preUpdate挂钩 如果您的问题只是关于表单上下文,那么它可能不适合您。
用法:
/**
* @ORM\HasLifecycleCallbacks
* @ORM\Entity
*/
class YourEntity
{
// ...
/**
*
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function manageProducts()
{
foreach ($this->getRegisterProducts() as $registerProduct) {
if ($registerProduct->getQuantity() < 1) {
$this->removeRegisterProduct($registerProduct);
}
}
}
}
请参阅学说文档的Events部分。
我希望你能使用这个解决方案,并确保它有效。