小编ste*_*ton的帖子

使用Symfony的Form Event删除发送到表单的一些数据

我有复选框,我想查找带有选中复选框的项目,并只将它们发送到数据库.所以我做了这个:

class NotNeededFieldsSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(FormEvents::PRE_BIND => 'preBindData');
    }

    public function preBindData(FormEvent $event)
    {    
        $data = $event->getData();

        $count = count($data['items']);

        for ($i=0; $i < $count; $i++){
             if (!array_key_exists('enabled', $data['items'][$i])){   
                unset($data['items'][$i]);               
             } 
        }       

        $event->setData($data);

    }
}
Run Code Online (Sandbox Code Playgroud)

当我测试看$ event-> getData正是我想要的.

在控制器中:

 $form = $this->formFactory->create(new ItemType(), $item);

        if ($request->isMethod('POST')) {
            $form->bind($request);           
                if ($form->isValid()) {  

                    $this->em->persist($item);
                    $this->em->flush();
                }
        }

        return $this->redirect($this->router->generate('home'));
Run Code Online (Sandbox Code Playgroud)

问题是仍然检查和未检查的项目在数据库中:(

任何想法为什么以及如何解决这个问题?首先十分感谢!:)

forms symfony

5
推荐指数
1
解决办法
1005
查看次数

标签 统计

forms ×1

symfony ×1