Есть ли способ передать некоторые переменные через ResourceController в шаблон в Sylius?

Мне нужно переопределить поведение маршрута sylius_partial_product_latest, чтобы иметь возможность отображать шаблон с дополнительным параметром.

Простой пример: на разных страницах мне нужно показывать от 2 до 4 товаров за раз с карусельной прокруткой 4-8 товаров. Теперь в шаблоне SyliusWebBundle:Frontend/Product:latest у меня есть:

{{ grid(products) }}

Но мне в некоторых случаях нужно:

{{ grid(products, 2) }}

В других:

{{ grid(products, 3) }}
{# or it can be 4 or any other number #}

Теперь в шаблоне у меня есть только products var (он обслуживается механизмом ресурсов), я могу передавать переменные в репозиторий, где я могу добавить их в свой массив products, но это не лучший способ. Это можно сделать, просто передав переменные в запрос:

{{ render(url('sylius_partial_product_latest', {'size': 3, 'limit': 2, 'template': 'SyliusWebBundle:Frontend/Product:latest.html.twig'})) }}

Мне нужно иметь возможность передавать переменную size в шаблон SyliusWebBundle:Frontend/Product:latest за пределами products.

Я пробовал переопределить ProductBundle и _13 _... Но переопределение контроллеров с настраиваемым действием (я не хочу отменять indexAction или showAction) ни к чему не привело. PHP вообще не попадает в мой контроллер. Вместо этого он ударил showAction из ResourceBundle. И да, я переопределил маршрутизацию, чтобы указать свой контроллер.

Если я заменяю ProductController новым маршрутом и использую его в своем шаблоне, он генерирует исключение:

Возникло исключение во время рендеринга шаблона («Контроллер» sylius.controller.product: partialAction «для URI» / partial «не вызывается.») В SyliusWebBundle: Frontend / Product: show.html.twig в строке 136 .

Когда я изменяю _controller, чтобы указать мой контроллер стандартным образом Symfony, у меня возникает следующее исключение:

Уловимая фатальная ошибка: аргумент 1, переданный в Sylius \ Bundle \ ResourceBundle \ Controller \ ResourceController :: __ construct (), должен быть экземпляром Sylius \ Bundle \ ResourceBundle \ Controller \ Configuration, не указан, вызывается в / Users / mihail / Sites / store /vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/ControllerResolver.php в строке 77 и определен в / Users / mihail / Sites / store / vendor / sylius / sylius / src / Sylius / Bundle / ResourceBundle / Controller /ResourceController.php в строке 63


person Michael Sivolobov    schedule 18.07.2014    source источник
comment
Это проблема нумерации страниц? Может быть, вы можете попробовать использовать пагерфанта для этой работы? Со значением MaxPerPage в вашем контроллере   -  person Hornth    schedule 21.07.2014
comment
Это не о разбиении на страницы.   -  person Michael Sivolobov    schedule 21.07.2014


Ответы (1)


Есть два способа сделать это ..

Контроллер

Вы можете расширить контроллер и передать переменную в свой шаблон так же, как и с любым другим контроллером.

Запрос

Вы можете просто передать переменную своему контроллеру через параметры GET в качестве запроса, подобного вашему ..

{{ render(url('sylius_partial_product_latest', {'size': 3, 'limit': 2, 'template': 'SyliusWebBundle:Frontend/Product:latest.html.twig'})) }}

.. а затем добавьте это в свой шаблон, используя объект запроса, например ..

{{ grid(product, app.request.get('size')) }} // with a default or null
person qooplmao    schedule 23.07.2014
comment
Я описал, что переопределить контроллер нелегко, как кажется. Может быть, есть слушатели, которые ловят и обрабатывают какие-то действия или что-то еще. Но второй способ потрясающий. Я совершенно забываю про веточку и ее доступ к app-контейнеру. Спасибо. - person Michael Sivolobov; 23.07.2014
comment
Не беспокойтесь ... Хотя расширение контроллеров может быть довольно простым делом, ваша ошибка, похоже, подразумевает, что расширенный контроллер не имеет установленного метода partialAction. Вы расширяли базовый контроллер продукта или просто добавляли свой? При этом я думаю, что это было бы излишним для вашей проблемы. - person qooplmao; 23.07.2014
comment
partialAction существует, и я расширяю базовый контроллер. Проблема не так понятна ... У меня есть рабочее решение и теперь переопределение не требуется. - person Michael Sivolobov; 23.07.2014
comment
Нет, совсем нет. Я согласен. - person qooplmao; 23.07.2014
comment
Спасибо ! Меня беспокоит, что это единственные решения. Зачем кому-то создавать такую ​​систему, в которой вы, проще говоря, являетесь разработчиком yaml, но не думаете о такой простой и распространенной проблеме ... - person lud; 08.03.2019