У меня есть контроллер, который возвращает все меню. Из файла twig я использую доступ к контроллеру, чтобы получить все меню.
Я мог бы видеть все мои меню в моем файле с ветками.
Код:
Twig Файл:
{% set menulist%}{%render url('get_all_menus')%}{% endset %}
Я использую for loop для печати имени моего меню. подобно
{% for menu in menulist %}
{{menu.MenuName}}
{%endfor%}
Но я не получаю никаких значений из цикла выше. Когда я использую дамп (список меню), я получаю результат как
[{"FunctionName":"Home","ModuleName":null,"SubModuleName":null,"PageURL":"home_page","AccessLevel":"2"}]
Это данные JSON, которые я возвращаю с моего контроллера. Как я могу получить значения из цикла for? Я делаю какую-либо ошибку здесь?
Почему вы выполняете другой контроллер? Он выполняет второй запрос к приложению. Создайте пользовательскую функцию твига для возврата элементов меню → http://symfony.com/doc/current/cookbook/templating/twig_extension.html
Это будет быстрее, и проблема JSON должна исчезнуть. Или, если вы не хотите создавать функцию ветки - рендеринг частичного файла twig в действии контроллера с именем "get_all_menus".
Вам нужно сохранить результат меню в одной переменной, как показано ниже:
И используется функция json_decode для преобразования ваших данных json в массив, чем вы можете получить данные вашего меню через цикл.
$menuJsonData = '[{"FunctionName":"Home","ModuleName":null,"SubModuleName":null,"PageURL":"home_page","AccessLevel":"2"}]';
$menuData = json_decode($test);
foreach($menuData as $menu){
echo $menu->FunctionName;
}