Una de las características más usadas en Symfony es la habilidad de traducir directamente un parámetro de una petición en el objeto correspondiente. Estos objetos son inyectados como argumentos de la acción del controlador. Podemos ver un ejemplo en la propia documentación de Symfony:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
/**
* @Route("/blog/{id}")
* @ParamConverter("post", class="SensioBlogBundle:Post")
*/
public function showAction(Post $post)
{
}
Internamente se llama a Doctrine y se encarga de buscar el post cuyo id corresponda al parametro pasado. ¿Que pasa si no usamos una base de datos relacional si no que queremos usar MongoDB?
MongoDB ODM y DoctrineParamConverter
Podría parecer que es una característica que falta por desarrollar para Doctrine ODM pero en realidad solo es necesario un poco de configuración para permitir reutilizar el servicio ParamConverter para que use Doctrine ODM. Necesitamos definir un servicio como el siguiente:
app.mongodb.paramconverter:
class: Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter
arguments: ["@doctrine_mongodb"]
tags:
- { name: request.param_converter }
Gracias a Matthias Noback por el post original, al que solo he modificado la configuración para usar yaml en lugar de xml.