Se você leu meu protocolo anterior sobre Symfony2: Services # 1, notou que em alguns casos precisará injetar dependências para o seu serviço. Neste capítulo, mostrarei como você pode fazer isso.
Vamos registrar um serviço com dependências de injeção:
example_service:
class: ExampleVendorSomeBundleServiceExampleService
arguments: [ @doctrine, @service_container ]
Neste caso, injetamos doutrina se você vai fazer alguma coisa com seu banco de dados, e também injetamos container de serviço se você vai fazer algo como modelar ou usar outro serviço ou usar contexto de segurança.
Vamos ver como fica na classe de serviço:
namespace ExampleVendor SomeBundle Service;
// This needs becouse of doctrine
use SymfonyBridgeDoctrineRegistryInterface as RegistryInterface;
class ExampleService
{
private $doctrine;
private $serviceContainer;
public function __construct(RegistryInterface $doctrine, $serviceContainer)
{
$this->doctrine = $doctrine;
$this->serviceContainer = $serviceContainer;
}
}
public function someExampleMethod()
{
# Get the current user
$user = $this->serviceContainer->get('security.context')->getToken()->getUser();
# Get entities from a repository
$entities = $this->doctrine->getRepository('SomeBundle:Something')->findAll();
# User templating for some reason (for eg. send a HTML mail out)
$html = $this->serviceContainer->get('templating')->renderResponse('SomeBundle:Default:file.html.twig');
)
Como você pode ver, adicionei 3 exemplos simples para demonstrar como você pode usar dependências nos serviços do Symfony2. Se você tiver mais perguntas, não hesite em perguntar no @zoltanradics no Twitter ou abaixo em comentários.