处理相同类型的表格

时间:2018-05-29 18:48:30

标签: php symfony symfony-forms

我需要在一个页面上创建和处理同一实体的几种形式。另外,我需要为每一个提供单独的提交按钮。

现在,在一个循环中,我为每个实体创建了一个表单数组,但是当我试图处理它时 - 它会崩溃。

主要问题是,当我提交表格时,一切似乎都很好 - 但产品始终是第一个生成的。

转储表单给出了结果,它们与正确的产品实体相关联,但在处理后它会崩溃。

我的代码片段:

控制器:

'allowedOrigins' => ['*']

CartType:     

foreach ($products as $product) {
    $counter = 0;
    $date = $comparativeDate;

    $tempCart = new Cart();
    $tempCart->setProduct($product['product']);
    $tempCart->setUserId($user);
    $tempCart->setQuantity(0);
    $tempCartForm = $this->createForm('AppBundle\Form\CartType',$tempCart, array('kind' => 'myProducts'));
    $tempCartForm->handleRequest($request);

    if($tempCartForm->isSubmitted() && $tempCartForm->isValid())
    {
        $data = $tempCartForm->getData();       
        $query = $em->createQueryBuilder()
          ->select('c','p')
          ->from('AppBundle:Cart','c')
          ->join('c.product','p')
          ->where("p = :product")
          ->andWhere("c.userId = :user")
          ->setParameter('product',$product['product'])
          ->setParameter('user',$user->getId())
          ->getQuery();

        $foundCart = $query->getResult();

        if(is_null($foundCart) || empty($foundCart))
        {
            $em->persist($data);
        }else{

          $foundCart = $foundCart[0];
          $foundCart->setQuantity($foundCart->getQuantity()+$data->getQuantity());
          $em->persist($foundCart);
        }

        $em->flush();

        return $this->redirectToRoute('my_products');
    }

    foreach ($products as $secondProduct) {

        if($product['product'] === $secondProduct['product'])
        {
            $counter++;

            if($date<$secondProduct['date'])
            {
                $date = $secondProduct['date'];
            }

            unset($secondProduct);
        }

        $productId = $product['product']->getId();

        //szykujemy tablice z danymi gotowymi do wyswietlenia
        $groupedProducts[$productId]['count']=$counter;
        $groupedProducts[$productId]['product']=$product['product'];
        $groupedProducts[$productId]['last_date']=$date;
        $groupedProducts[$productId]['form_view']=$tempCartForm->createView();
    }
}

购物车字段:

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;

use Symfony\Component\OptionsResolver\OptionsResolver;

class CartType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         $builder->add('quantity', IntegerType::class, [
           'label' => false
         ]);

         if($options['kind']=='myProducts'){
            $builder->add('save', SubmitType::class, [
           'label' => 'SLIJ'
         ])
                     ->add('product', EntityType::class, [
                        'class' => 'AppBundle:Product',
         ]);
         }
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Cart',
            'kind'      => null
        ));
    }

}

?>

表格在每个分组产品行的模板中生成。

1 个答案:

答案 0 :(得分:1)

  

主要问题是,当我提交表格时,一切似乎都很好 - 但产品始终是第一个生成的。

如果您提交表格,则应执行以下代码

if($tempCartForm->isSubmitted() && $tempCartForm->isValid())
{
    // code ...
    return $this->redirectToRoute('my_products');
}

然后它不会到达处理第二个产品的代码,不是吗?