Esta marca una propiedad o parámetro para inyección:
<?php
use JMS\DiExtraBundle\Annotation\Inject;
class Controller
{
/**
* @Inject("security.context", required = false)
*/
private $securityContext;
/**
* @Inject("request", strict = false)
*/
private $request;
/**
* @Inject("%kernel.cache_dir%")
*/
private $cacheDir;
/**
* @Inject
*/
private $session;
}
Truco
Si no especificas el servicio explícitamente, intentaremos deducirlo basándonos en el nombre de la propiedad o parámetro.
La opción «strict» se puede pasar a false para evitar excepciones de tipo Symfony\Component\DependencyInjection\Exception\ScopeCrossingInjectionException, si el aámbito del servicio inyectado es diferente del actual (por ejemplo, request o prototype).
Esta marca los parámetros de un método para inyección:
<?php
use JMS\DiExtraBundle\Annotation\Inject;
use JMS\DiExtraBundle\Annotation\InjectParams;
use JMS\DiExtraBundle\Annotation\Service;
/**
* @Service
*/
class Listener
{
/**
* @InjectParams({
* "em" = @Inject("doctrine.entity_manager")
* })
*/
public function __construct(EntityManager $em, Session $session)
{
// ...
}
}
Si no defines todos los parámetros en la asignación de parámetros, trataremos de adivinar cuáles servicios se deben inyectar basándonos en el nombre de los demás parámetros.
Marca una clase como un servicio:
<?php
use JMS\DiExtraBundle\Annotation\Service;
/**
* @Service("some.service.id", parent="another.service.id", public=false)
*/
class Listener
{
}
Si no defines explícitamente un identificador del servicio, entonces se generará uno predeterminado basado en el nombre completamente cualificado de la clase.
Añade una etiqueta al servicio:
<?php
use JMS\DiExtraBundle\Annotation\Service;
use JMS\DiExtraBundle\Annotation\Tag;
/**
* @Service
* @Tag("doctrine.event_listener", attributes = {"event" = "postGenerateSchema", lazy=true})
*/
class Listener
{
// ...
}
Automáticamente registra un método como escucha de un determinado evento:
<?php
use JMS\DiExtraBundle\Annotation\Observe;
use JMS\DiExtraBundle\Annotation\Service;
/**
* @Service
*/
class RequestListener
{
/**
* @Observe("kernel.request", priority = 255)
*/
public function onKernelRequest()
{
// ...
}
}
Automáticamente registra la clase como restricción de validación para el componente Validador:
<?php
use JMS\DiExtraBundle\Annotation\Validator;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
/**
* @Validator("my_alias")
*/
class MyValidator extends ConstraintValidator
{
// ...
}
class MyConstraint extends Constraint
{
// ...
public function validatedBy()
{
return 'my_alias';
}
}
La anotación @Validator además implica la anotación @Service, si no la especificas explícitamente. Los alias que se pasan a la anotación @Validator deben coincidir con la cadena devuelta desde el método validatedBy de tu restricción.
Automáticamente registra la clase suministrada como un tipo form en el componente Form de Symfony2.
<?php
use JMS\DiExtraBundle\Annotation\FormType;
use Symfony\Component\Form\AbstractType;
/**
* @FormType
*/
class MyFormType extends AbstractType
{
// ...
public function getName()
{
return 'my_form';
}
}
// Controller.php
$form = $this->formFactory->create('my_form');
Nota
@FormType implica @Service si no se definió explícitamente.
Automáticamente, registra la clase dada como un escucha para el ORM de Doctrine o el ODM del MongoDB de Doctrine:
<?php
use JMS\DiExtraBundle\Annotation\DoctrineListener;
/**
* @DoctrineListener(
* events = {"prePersist", "preUpdate"},
* connection = "default",
* lazy = true,
* priority = 0,
* )
class MyListener
{
// ...
}
Nota
@DoctrineListener implica @Service si no se definió explícitamente.