Вам, вероятно, понадобится тег include
, который включает другой шаблон.
{% include 'FooBundle::partial.html.twig' %}
Включение шаблонов предназначено для простых случаев, когда вам просто необходимы такие вещи, как частичные.
Тег render
предназначен для вызова контроллеров, выполнения более сложных задач или если ваш шаблон не может получить доступ к переменным, необходимым для простого отображения. При этом ядро создает новый запрос, как если бы он пришел как отдельный запрос. Фактически, используя ESI, это может быть отдельный запрос к этому контроллеру. Подробнее см. Здесь . Из-за этого вы не можете получить основной объект запроса, вероятно, нет основного объекта запроса, потому что вы используете ESI или потому что вы создаете маршрут для этого контроллера и вызываете его через AJAX или что-то еще. Опираясь на информацию о том, что ваш контроллер вызывается посредством подзапроса, инфраструктура, как я знаю, не поддерживается, и я думаю, что это сделано намеренно. Вы должны передать всю информацию в параметрах запроса.
Ваш пример неверен, это будет выглядеть так:
{% render 'FooBundle:MyController:actionName' ... %}
У вас должен быть такой класс FooBundle\Controller\MyControllerController
, чтобы он мог работать.
namespace FooBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class MyControllerController extends Controller {
public function actionNameAction() {
...
}
}