Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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 处理相同类型的表格_Php_Symfony_Symfony Forms - Fatal编程技术网

Php 处理相同类型的表格

Php 处理相同类型的表格,php,symfony,symfony-forms,Php,Symfony,Symfony Forms,我需要在一个页面上创建和处理同一实体的几个表单。此外,我需要为每一个单独的提交按钮 现在,在一个循环中,我为每个实体创建了一个表单数组,但当我试图处理它时,它就崩溃了 主要的问题是,当我提交表单时,一切看起来都很好——但产品总是第一个生成的 倾销表给出的结果是,它们与适当的产品实体相连接,但在处理后会发生故障 我的代码片段: 控制器: foreach ($products as $product) { $counter = 0; $date = $comparativeDate;

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

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

主要的问题是,当我提交表单时,一切看起来都很好——但产品总是第一个生成的

倾销表给出的结果是,它们与适当的产品实体相连接,但在处理后会发生故障

我的代码片段:

控制器:

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();
    }
}
购物车字段:

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="carts")
     */
    private $userId;

    /**
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="carts")
     */
    protected $product;

    /**
     * @ORM\Column(type="integer")
     */
    private $quantity;
并且表单在每个groupedProducts行的template in行中生成

主要的问题是,当我提交表单时,一切看起来都很好——但产品总是第一个生成的

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

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

那么它就不会到达处理第二个产品的代码,不是吗?

您可以添加html/twig吗?另外,您是如何提交表单的?您所说的“主要问题是,当我提交表单时,一切看起来都很好,但产品总是第一个生成的”是什么意思?你是说来自主foreach循环的产品吗?@LiorahayDon不需要输入代码-只需要表单开始、表单小部件(表单)和表单结束。即使我将save和product字段添加到Carttype.php,它也不会work@FranckGamess确切地但是请记住-表单连接到适当的购物车实体(我的意思是使用适当的产品),但是在提交错误之后,那么我应该如何处理这些表单呢?我认为这是一个很好的方法-在同一个控制器的另一种方法中,我做了类似的事情,一切都很完美。在这种情况下,尝试在测试表单提交之前执行第二个foreach,或者在处理第二个产品之后转到我的产品路线
if($tempCartForm->isSubmitted() && $tempCartForm->isValid())
{
    // code ...
    return $this->redirectToRoute('my_products');
}