Как добавить сервис twig в мой пакет?

Я создал новый пакет (AcmeNotificationBundle) и хочу использовать его как такой сервис:

$notification = $this->get( 'notification' );
$mess = $notification->getNotification( 'Some notification message' )->createView();

Но в моем комплекте мне нужен сервис twig для рендеринга шаблонов уведомлений. Я понимаю, что мне нужно что-то вроде этого в файле Resources\config\services.yml:

services:
twig:
    class: Path\To\Twig\Class

Но я не знаю, каков правильный путь к классу веток. Кто-нибудь сталкивался с этой проблемой? Как правильно добавить сервис twig в комплект?


person Aleksei Kornushkin    schedule 20.11.2011    source источник
comment
Я думаю, что это лучший ответ для этого: [10304468][stackoverflow.com/questions/10304468/   -  person K. Smith    schedule 04.09.2017


Ответы (1)


Сервис шаблонов уже доступен в вашем комплекте. Вы можете получить его из контейнера:

$container->get('templating');

Вы должны иметь доступ к сервису twig аналогичным образом:

$container->get('twig');

В остальной части моего ответа используется служба шаблонов, но вы можете легко заменить ее на ветку, если вам действительно нужно.

Я думаю, что вам нужно передать службу шаблонов службе уведомлений.

services:
    notification:
        class:     Acme\NotificationBundle\Notification
        arguments: [@templating]

Ваш класс уведомлений будет принимать шаблоны в качестве параметра конструктора:

use Symfony\Bundle\TwigBundle\TwigEngine;

class Notification
{
    /**
     * @var Symfony\Bundle\TwigBundle\TwigEngine $templating
     */
    private $templating = null;

    /**
     * @param Symfony\Bundle\TwigBundle\TwigEngine $templating
     *
     * @return null
     */
    public function __construct(TwigEngine $templating)
    {
        $this->templating = $templating;
    }
}

Вместо $notification->getNotification('Some notification message')->createView() я бы, наверное, сделал $notification->createNotificationView('Some notification message'). Я предполагаю, что сообщение уведомления является сущностью, и нет необходимости передавать шаблоны сущности.

Сопутствующая документация: Услуги ссылки (внедрения)

person Jakub Zalas    schedule 20.11.2011
comment
Спасибо за быстрый и полезный ответ! Это именно то, что мне нужно! - person Aleksei Kornushkin; 20.11.2011