Доступ к услугам внутри обычного класса - PullRequest
5 голосов
/ 21 января 2012

У меня есть обычный класс в моем проекте Symfony2:

    class RangeColumn extends Column{
        //...
    }

Теперь внутри этого класса есть функция рендеринга, в которой я хотел бы использовать Twig или службу перевода Symfony2 для рендеринга определенногошаблон.Как мне получить доступ к этим услугам надлежащим образом?

Ответы [ 2 ]

11 голосов
/ 21 января 2012

Пример кода:

<?php

class MyRegularClass
{
    private $translator;

    public function __construct(Translator $translator)
    {
        $this->translator = $translator;
    }

    public function myFunction()
    {
        $this->translator->trans('sentence_to_translate');
    }
}

И если вы хотите, чтобы ваш класс стал услугой: В вашем файле services.yml, расположенном в вашем комплекте,

parameters:
    my_regular_class.class: Vendor\MyBundle\Classes\MyRegularClass

services:
    mybundle.classes.my_regular_class:
        class: %my_regular_class.class%
        arguments: [@translator]

Подробнее см. Главу о Symfony2 Сервисный контейнер

10 голосов
/ 21 января 2012

Использовать внедрение зависимости . Это действительно простая концепция.

Вы должны просто передать (ввести) необходимые услуги вашему классу.

Если зависимости обязательны передать их в конструкторе . Если они необязательны , используйте сеттеры .

Вы можете пойти дальше и делегировать конструкцию вашего класса контейнеру внедрения зависимостей (сделать из него сервис).

Услуги ничем не отличаются от вашего «обычного» класса. Просто их конструкция делегирована контейнеру.

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