Я хотел бы создать в динамическом меню макета, который будет управляться с административной панели. То, что я знаю, это объект, который может быть передан для просмотра действием контроллера.
То, что я хочу, это передать объект в макет (движок ветки) без использования контроллера, и он будет работать независимо от контроллера и действия.
Как я могу это сделать?
Если вы хотите глобальную переменную/объект в Twig, вам нужно реализовать Twig_Extension
и добавить новый глобальный (который будет доступен для всех ваших шаблонов).
Простой пример:
1) Зарегистрируйте службу в <bundle>/Resources/config/services.yml
services:
acme.twig.acme_extension:
class: Acme\DemoBundle\Twig\AcmeExtension
tags:
- { name: twig.extension }
2) Затем создайте расширение:
<?php
namespace Acme\DemoBundle\Twig
class AcmeExtension extends \Twig_Extension {
public function getGlobals() {
return [
'menu' => new Menu(),
];
}
}
3) Затем в вашем шаблоне:
{{ menu.render }} // Whatever
Конечно, вы можете передать аргументы в расширение Twig, если это необходимо.
В любом случае, если вы пытаетесь создать меню, возможно, вам стоит взглянуть на KnpMenuBundle, что очень помогает (https://github.com/KnpLabs/KnpMenuBundle)
Надеюсь, поможет!
$twig->addGlobal('my_object', $object);
U может создать необходимый вам объект и затем использовать$twig->addGlobal('my_object', $object);
, Таким образом, ваш объект доступен везде