Sonata\ProductBundle\Controller\ProductController::variationToProductAction PHP Method

variationToProductAction() public method

public variationToProductAction ( $productId, $slug ) : Response
$productId
$slug
return Symfony\Component\HttpFoundation\Response
    public function variationToProductAction($productId, $slug)
    {
        $product = is_object($productId) ? $productId : $this->get('sonata.product.set.manager')->findEnabledFromIdAndSlug($productId, $slug);
        if (!$product) {
            throw new NotFoundHttpException(sprintf('Unable to find the product with id=%d', $productId));
        }
        if (null !== $product->getParent()) {
            // We need the master product
            $product = $product->getParent();
        }
        $provider = $this->get('sonata.product.pool')->getProvider($product);
        $data = $this->getRequest()->query->get('sonata_product_variation_choices');
        $choices = $provider->getVariationsChoices($product, array_keys($data));
        $accessor = PropertyAccess::createPropertyAccessor();
        $currentValues = array();
        foreach ($choices as $field => $values) {
            $currentValues[$field] = array_search($accessor->getValue($product, $field), $values);
        }
        $form = $this->createForm('sonata_product_variation_choices', $currentValues, array('product' => $product, 'fields' => array_keys($data)));
        $form->handleRequest($this->getRequest());
        $selectedVariation = $form->getData();
        // Retrieving correct values
        foreach ($selectedVariation as $key => $value) {
            $selectedVariation[$key] = $choices[$key][$value];
        }
        $variation = $provider->getVariation($product, $selectedVariation);
        $action = sprintf('%s:variationToProduct', $provider->getBaseControllerName());
        $response = $this->forward($action, array('product' => $product, 'variation' => $variation));
        if ($this->get('kernel')->isDebug() && !$response instanceof JsonResponse) {
            $response->setContent(sprintf("\n<!-- [Sonata] Product code: %s, id: %s, action: %s  -->\n%s\n<!-- [Sonata] end product -->\n", $this->get('sonata.product.pool')->getProductCode($product), $product->getId(), $action, $response->getContent()));
        }
        return $response;
    }