2012-01-21 4 views
5

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

class RangeColumn extends Column{ 
     //... 
    } 

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

ответ

10

Использование dependency injection. Это очень простая концепция.

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

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

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

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

11

Код:

<?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 Service Container

+2

Значок тега зависимостей «@ translator.default» от Symfony 2.6, тег '@ translator' относится к LoggingTranslator. – Lashae

 Смежные вопросы

  • Нет связанных вопросов^_^