gpt4 book ai didi

php - Symfony2 删除 FormType 中的空字段

转载 作者:搜寻专家 更新时间:2023-10-31 21:26:27 26 4
gpt4 key购买 nike

我的 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);
}

目的是如果这个数组中的某个字段为空(有效),则删除数组值

但是当我设置数据时出现这个错误:

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);
}
}
}

最佳答案

正如评论中所说,您应该在 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 Hook 。
如果您的问题只是关于表单上下文,它可能不是您的替代选择。

用法:

/**
* @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条令文件的一部分。

我希望你能使用这个解决方案并且它有效。

关于php - Symfony2 删除 FormType 中的空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com