Symfony2 – Serviços # 2

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.