Sylius: только один незавершенный объект в RequestStack через определенный маршрут - PullRequest
0 голосов
/ 23 сентября 2019

Я новичок в Symfony и пишу плагин для системы электронной коммерции Sylius: каждый маршрут до сих пор давал мне два объекта в RequestStack, и я мог получить очень конкретную переменную везде через тот, который я извлекалчерез $ requestStack-> getMasterRequest ().

В конкретном маршруте переменная (заданная в файле yaml, в которой настроены маршруты) внезапно не может быть извлечена, и $ requestStack не содержит два объекта, только один.

Я извиняюсь,Я знаю, что это очень плохо объяснено, я надеюсь, что кто-то может разобраться в этом.

Я пытался $ request = Request :: createFromGlobals () и получал Контейнер вместо RequestStack напрямую, но оба заканчивали стот же результат.

# This is the route I am trying to overwrite because I want to give it an extra parameter from the request:

sylius_shop_product_show:
path: /products/{slug}
methods: [GET]
defaults:
    _controller: sylius.controller.product:showAction
    _sylius:
        template: "@SyliusShop/Product/show.html.twig"
        repository:
            method: findOneByChannelAndSlug_andVarFromRequest
            arguments:
                - "expr:service('sylius.context.channel').getChannel()"
                - "expr:service('sylius.context.locale').getLocaleCode()"
                - $slug
                - "expr:service('request_stack')"


//This is the function which should be used, it is part of a Repository 
public function findOneByChannelAndSlug_andVarFromRequest(ChannelInterface $channel, string $locale, string $slug, RequestStack $requestStack): ?ProductInterface
{

Я не понимаю, почему вдруг я не могу удержать переменную, к которой я могу получить доступ через все другие маршруты.Потому что это хранилище?Запрос еще не полностью обработан?

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Попробуйте ввести имя переменной с символом $ перед ее именем.Например, если имя вашей переменной myVar:

sylius_shop_product_show:
path: /products/{slug}
methods: [GET]
defaults:
    _controller: sylius.controller.product:showAction
    _sylius:
        template: "@SyliusShop/Product/show.html.twig"
        repository:
            method: findOneByChannelAndSlug_andVarFromRequest
            arguments:
                - "expr:service('sylius.context.channel').getChannel()"
                - "expr:service('sylius.context.locale').getLocaleCode()"
                - $slug
                - $myVar

Как это работает под капотом: https://github.com/Sylius/SyliusResourceBundle/blob/1.4/src/Bundle/Controller/ParametersParser.php#L55 Примечание: $request->get() метод - псевдоним для получения переменных из GET, POST и Symfonyатрибуты.

0 голосов
/ 26 сентября 2019

Я сам решил это вчера.Проблема заключалась в том, что я не объявил sylius_shop_product_show в правильной области описания маршрута, в которой также была объявлена ​​переменная, через которую я пытался пройти, таким образом Symfony не смог логически проанализировать и сделать ее доступной.Что ж, видя решение прямо сейчас, оно имеет смысл, но прежде и тот факт, что я новичок Symfony (и, следовательно, Sylius), было трудно понять, в чем дело.

Так что я понял проблему, когдавыполнил отладку php bin / console: маршрутизатор, который перечислил все доступные маршруты, и когда я обнаружил, что маршрут sylius_shop_product_show на самом деле не создает маршрут, где искомая переменная была даже доступна в пути маршрутизации.Спасибо всем, кто пытался мне помочь!

...