После обновления с Symfony 2.3 до 2.4 возникает следующее исключение:
Во время рендеринга шаблона было выбрано исключение («Рендеринг фрагмента может быть выполнен только при обработке запроса») в PageBundle :: base.html.twig в строке 34.
Код пытается отобразить контроллер:
{% if not app.user %} <div id="login" class="fourcol last"> {{ render(controller("SecurityBundle:Front/Security:login")) }} </div> {% endif %}
Исключение выбрано фрагментомHandler, потому что $ request имеет значение null:
public function render($uri, $renderer = 'inline', array $options = array()) { if (!isset($options['ignore_errors'])) { $options['ignore_errors'] = !$this->debug; } if (!isset($this->renderers[$renderer])) { throw new \InvalidArgumentException(sprintf('The "%s" renderer does not exist.', $renderer)); } if (!$request = $this->getRequest()) { throw new \LogicException('Rendering a fragment can only be done when handling a Request.'); } var_dump($request); die(); return $this->deliver($this->renderers[$renderer]->render($uri, $request, $options)); }
Это также происходит при других вызовах функции рендеринга.
Список версий компонентов Symfony от композитора:
symfony/assetic-bundle v2.3.0 symfony/icu v1.2.0 symfony/monolog-bundle v2.3.0 symfony/swiftmailer-bundle v2.3.4 symfony/symfony v2.4.0
Любая помощь будет принята с благодарностью
У меня такая же ошибка, но если я удалю папку «vendor» и заново ее создам с помощью «php composer.phar install», все работает отлично …
К счастью, у меня была тестовая версия сайта, развернутого в другом месте, поэтому я смог сравнить версии зависимостей. Эта ошибка была решена путем возврата к Symfony 2.3.7. Вот обновленные версии:
symfony/assetic-bundle v2.3.0 symfony/icu v1.2.0 symfony/monolog-bundle v2.3.0 symfony/swiftmailer-bundle v2.3.4 symfony/symfony v2.3.7
Метод рендеринга в FragmentHandler в 2.3.7 имеет другое условие от 2.4.0
if (null === $this->request) { throw new \LogicException('Rendering a fragment can only be done when handling a master Request.'); }
Это проверка на нуль
Не уверен, что у меня была такая же проблема, но она дала мне «Рендеринг фрагмента можно сделать только при обработке запроса». ошибка.
Я решил, что, восстановив bootstrap с помощью этой команды:
php vendor/bundles/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php app
См. Также: Обновление Symfony 2.4: «Рендеринг фрагмента может быть выполнен только при обработке запроса».