В настоящее время я использую Sylius Ecommerce для веб-сайта и хочу автоматически добавлять продукт в корзину по запросу пользователя.
В свой контроллер я вставил:
$repository = $this->container->get('sylius.repository.product');
$product = $repository->find(126);
return $this->forward('sylius.controller.cart_item:addAction', ['id' => $product->getId()]);
Но это дает мне ошибку:
Уловимая фатальная ошибка: аргумент 1, переданный в Sylius \ Component \ Variation \ Model \ Variant :: hasOption (), должен реализовывать интерфейс Sylius \ Component \ Variation \ Model \ OptionValueInterface, задано значение null,
Просмотр документации по sylius и файл _single.html.twig в /var/www/html/sylius/vendor/sylius/sylius/src/Sylius/Bundle/WebBundle/Resources/views/Frontend/Product/_single.html.twig
Я обнаружил, что кнопка «Добавить в корзину» на самом деле также отправляет небольшую форму в следующем фрагменте:
<form action="{{ path('sylius_cart_item_add', {'id': product.id}) }}" method="post" class="clearfix">
{% set form = sylius_cart_form({'product': product}) %}
{{ form_widget(form.quantity, {'attr': {'class': 'center-text'}, 'empty_value': '1'}) }}
{{ form_widget(form._token) }}
<button type="submit" class="btn btn-success"><i class="icon-shopping-cart icon-white"></i> {{ 'sylius.add_to_cart'|trans }}</button>
</form>
Теперь мой вопрос: как мне эмулировать это в моем контроллере? Как добавить продукт прямо из контроллера, а не по ссылке вроде:
<a href="{{ path('sylius_cart_item_add', {'productId': product.id}) }}">Add product to cart</a>