Как передать объект в представление макета без действий в Symfony 2?

0

Я хотел бы создать в динамическом меню макета, который будет управляться с административной панели. То, что я знаю, это объект, который может быть передан для просмотра действием контроллера.

То, что я хочу, это передать объект в макет (движок ветки) без использования контроллера, и он будет работать независимо от контроллера и действия.

Как я могу это сделать?

  • 0
    После того, как вы зарегистрировали механизм $twig->addGlobal('my_object', $object); U может создать необходимый вам объект и затем использовать $twig->addGlobal('my_object', $object); , Таким образом, ваш объект доступен везде
Теги:
twig

1 ответ

0
Лучший ответ

Если вы хотите глобальную переменную/объект в 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)

Надеюсь, поможет!

  • 0
    Спасибо за ответ, DarkBee сказал, что я должен сделать, я нашел решение, но большое спасибо за ваше решение. Я новичок в php и не знаю всего :), еще раз спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню