it-swarm.com.de

Wie entleere ich programmgesteuert einen Wagen?

Ich möchte den Warenkorb vor einem Produkt im Code leeren. Ich habe es versucht

$this->cartProvider->emptyCart($cart);

Dies funktionierte jedoch nicht und gab einen Fehler. Ich mache das in Drupal 8. Ich füge Produkte in den Controller-Code ein.

So hole ich den Wagen.

$destination = \Drupal::service('path.current')->getPath();
   $productObj = Product::load($productId);

   $product_variation_id = $productObj->get('variations')
     ->getValue()[0]['target_id'];
   $storeId = $productObj->get('stores')->getValue()[0]['target_id'];
   $variationobj = \Drupal::entityTypeManager()
     ->getStorage('commerce_product_variation')
     ->load($product_variation_id);
   $store = \Drupal::entityTypeManager()
     ->getStorage('commerce_store')
     ->load($storeId);



     $cart = $this->cartProvider->getCart('default', $store);

     $this->cartManager->emptyCart($cart);

   if (!$cart) {
    $cart = $this->cartProvider->createCart('default', $store);

   }

   $line_item_type_storage = \Drupal::entityTypeManager()
     ->getStorage('commerce_order_item_type');
// Process to place order programatically.
   $cart_manager = \Drupal::service('commerce_cart.cart_manager');
   $line_item = $cart_manager->addEntity($cart, $variationobj);

    $response = new RedirectResponse(Url::fromRoute('commerce_cart.page')->toString());
    return $response;

2
InspiredCoder

Sie müssen stattdessen den Dienst commerce_cart.cart_manager Verwenden.

Also sollte $this->cartManager->emptyCart($cart); den Trick machen.

pdate : Der Grund, warum Sie eine Fehlermeldung erhalten, ist, dass Sie versuchen, emptyCart auf $cart Aufzurufen, dann ist es NULL.

Sie müssen die Zeile, in der Sie den Einkaufswagen leeren, in eine if-Anweisung wie folgt einschließen:

if (!empty($cart)) {
  $this->cartManager->emptyCart($cart);
}
2
user72672