Удивительно, но я подумал, что можно было бы сделать так, как вы, чтобы передать простую переменную, кажется, что только массивы принимаются в качестве переданных значений. (В то время как два примера include doc массивы, это конкретно не уточнено.)
В вашем случае, вы должны написать это так:
{% set menuType = 'user' %}
{% include 'MyBundle:nav.html.twig' with {menuType:menuType} only %}
Примечание: Я добавил ключевое слово only
, чтобы отключить доступ к контексту. Без этого вам не нужно передавать переменную к включенным шаблонам, так как они будут иметь к ним доступ. (Это хорошая практика, чтобы отключить его.)
Вот Twigfiddle с некоторыми испытаниями и свалки: https://twigfiddle.com/gtnqvv
{% set menuType = 'user' %}
{% set vars = {'foo': 'bar'} %}
{% set z = 'bob' %}
{# vars dumps ommitted here, see the fiddle. #}
{#% include '1.html.twig' with menuType only %#}
{% include '1.html.twig' with {menuType:menuType} only %}
{% include '2.html.twig' with vars only %}
{% include '3.html.twig' with {z:z} only %}
{#% include '3.html.twig' with z only %#}
Первые и последние комментируемые линии не работают, как вы знаете, здесь ошибка:
Uncaught TypeError: Argument 1 passed to Twig_Template::display() must be of the type array, string given
вторые работы, как вы хотите, вы просто должны сделать это массив. (Странно в любом случае)
Третья строка - это тест от документа Twig, а четвертый - тест с другим именем переменной, чтобы быть уверенным.
Обратите внимание, что хорошая практика отключает доступ к контексту с помощью ключевого слова 'only'. – Veve
@ Виве, почему это должно быть хорошей практикой? – DarkBee