You are here

public function ProductBundleLazyBuilders::addToCartForm in Commerce Product Bundle 8

Builds the add to cart form.

Parameters

string $product_bundle_id: The product bundle ID.

string $view_mode: The view mode used to render the product bundle.

bool $combine: TRUE to combine order items containing the same product bundle items.

Return value

array A renderable array containing the add to cart form.

Throws

\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException

\Drupal\Core\Form\EnforcedResponseException

\Drupal\Core\Form\FormAjaxException

File

src/ProductBundleLazyBuilders.php, line 58

Class

ProductBundleLazyBuilders
Provides #lazy_builder callbacks.

Namespace

Drupal\commerce_product_bundle

Code

public function addToCartForm($product_bundle_id, $view_mode, $combine) {

  /** @var \Drupal\commerce_order\OrderItemStorageInterface $order_item_storage */
  $order_item_storage = $this->entityTypeManager
    ->getStorage('commerce_order_item');

  /** @var \Drupal\commerce_product_bundle\Entity\BundleInterface $product_bundle */
  $product_bundle = $this->entityTypeManager
    ->getStorage('commerce_product_bundle')
    ->load($product_bundle_id);
  $order_item = $order_item_storage
    ->createFromPurchasableEntity($product_bundle);

  /** @var \Drupal\commerce_cart\Form\AddToCartFormInterface $form_object */
  $form_object = $this->entityTypeManager
    ->getFormObject('commerce_order_item', 'add_to_cart');
  $form_object
    ->setEntity($order_item);

  // The default form id is based on the variation ID, but in this case the
  // product bundle id is more reliable (the variation/selection might change
  // between requests due to an availability change, for example).
  $form_object
    ->setFormId($form_object
    ->getBaseFormId() . '_commerce_product_bundle_' . $product_bundle_id);
  $form_state = (new FormState())
    ->setFormState([
    'product_bundle' => $product_bundle,
    'view_mode' => $view_mode,
    'settings' => [
      'combine' => $combine,
    ],
  ]);
  return $this->formBuilder
    ->buildForm($form_object, $form_state);
}