Как добавить сервис веток в мой комплект? - PullRequest
1 голос
/ 20 ноября 2011

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

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

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

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

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

1 Ответ

9 голосов
/ 20 ноября 2011

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

$container->get('templating');

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

$container->get('twig');

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

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

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

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

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').Я предполагаю, что уведомляющее сообщение является сущностью, и нет необходимости передавать шаблоны сущности.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...