Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2删除FormType中的空字段_Php_Symfony - Fatal编程技术网

Php Symfony2删除FormType中的空字段

Php Symfony2删除FormType中的空字段,php,symfony,Php,Symfony,我的Symfony2表单类型中有一个OnPremit public function onPreSubmit(FormEvent $event) { $data = $event->getData(); // Avoid sending empty RegisterProduct foreach ($data['registerProducts'] as $key => $registerProduct) { if (empty($regi

我的Symfony2表单类型中有一个OnPremit

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);
        }
    }
}
公共函数onPostSubmit(FormEvent$event) { /**@var寄存器$Register*/ $register=$event->getForm()->getData(); foreach($register->getRegisterProducts()作为$registerProduct){ 如果($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挂钩。
如果您的问题只是关于表单上下文,那么它可能不是您的备选方案

用法:

/**
 * @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);
            }
        }
    }
}
/**
*@ORM\HasLifecycleCallbacks
*@ORM\Entity
*/
将您的实体分类
{
// ...
/**
*
*@ORM\PrePersist
*@ORM\PreUpdate
*/
公共职能管理产品()
{
foreach($this->getRegisterProducts()作为$registerProduct){
如果($registerProduct->getQuantity()<1){
$this->removeRegisterProduct($registerProduct);
}
}
}
}
参见条令文件部分


我希望您可以使用此解决方案,并且它能够正常工作。

难道不应该在PostSubmit上执行此操作吗?我尝试按照您所说的那样执行此操作,但仍然存在相同的错误。我编辑了我的帖子。您是否尝试过
$event->getData()
取消设置
?是的,我使用了
$event->getData()
。使用
onPostSubmit$event
不再向我发送数组,而是发送对象。所以没有
unset
。这就是为什么我使用了
removeRegisterProduct
@Chalasr您可以尝试与上次编辑相同的代码,但只需将
$event->getForm->getData()
替换为
$event->getData
?谢谢你告诉我们。