2012-01-21 10 views
5

Mam regularne klasy w moim projekcie Symfony2:usługi dostępu w regularnej klasie

class RangeColumn extends Column{ 
     //... 
    } 

Teraz wewnątrz tej klasy jest funkcja render, w których chciałbym użyć Twig lub usługi tłumaczenia z Symfony2 renderować określony szablon. Jak uzyskać dostęp do tych usług we właściwy sposób?

Odpowiedz

10

Użyj dependency injection. To naprawdę prosta koncepcja.

Powinieneś po prostu przekazać (wstrzyknąć) potrzebne usługi do swojej klasy.

Jeśli zależności są obowiązkowe przekazać je w konstruktora. Jeśli są one opcjonalnie użyj ustawiaczy.

Możesz pójść dalej i przekazać budowę swojej klasy do pojemnika wstrzykiwania zależności (zrób z tego usługę).

Usługi nie różnią się od "zwykłej" klasy. Po prostu ich budowa jest przekazywana do kontenera. Przykładem

11

Kod:

<?php 

class MyRegularClass 
{ 
    private $translator; 

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

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

A jeśli chcesz klasa stać się serwis: W pliku services.yml znajduje się w wiązce,

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

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

Aby uzyskać więcej informacji, zobacz rozdział o Symfony2 Service Container

+2

Tag Injection Injection to '@ translator.default' od Symfony 2.6, znacznik' @ translator' odnosi się teraz do LoggingTranslator. – Lashae

Powiązane problemy