Symfony 5.2 添加到会话数组

Symfony 5.2 add to session array

我想将产品添加到我的会话数组,但它总是覆盖现有产品并且只有一个。

    /**
     * @Route("/{id}", name="add", methods={"GET"})
    */

  public function add(Product $product, Request $request): Response
   {
       $session= $request->getSession();
       $session->set('products', array(
           'list' => $product,
       ));
       $this->addFlash('success', 'add');
       return $this->render('index.html.twig', [
           'product' => $product
        ]);
    }

有什么建议吗?

您每次都覆盖会话变量,而不是添加新产品。尝试获取产品,添加新产品,然后设置会话:

public function add(Product $product, Request $request): Response
{
   $session= $request->getSession();
   $products = $session->get('products', []);
   $session->set('products', array(
       'list' => array_merge($products['list'] ?? [], [$product]) 
   ));
   $this->addFlash('success', 'add');
   return $this->render('index.html.twig', [
       'product' => $product
    ]);
}

如果您想要不同的产品,您可以使用产品['id']作为键

public function add(Product $product, Request $request): Response
{
   $session= $request->getSession();
   $products = $session->get('products', []);
   $products[$product['id']] = $product;
   $session->set('products', products);
   $this->addFlash('success', 'add');
   return $this->render('index.html.twig', [
       'product' => $product
    ]);
}