Overview
En esta guía, puedes aprender sobre la integración de Symfony MongoDB y cómo utilizar este framework para compilar una aplicación web PHP sencilla. Puedes leer sobre los beneficios de usar Symfony para compilar aplicaciones web con MongoDB como base de datos y practicar usando bibliotecas que simplifican las consultas a MongoDB.
Symfony es un framework flexible y altamente configurable para construir aplicaciones en PHP. Puedes usar este framework para crear componentes reutilizables y agilizar tu aplicación web.
¿Por qué usar MongoDB en una aplicación Symfony?
Al utilizar MongoDB como almacén de datos en una aplicación web Symfony, puedes aprovechar el modelo de datos basado en documentos para compilar ricas expresiones de query, lo que te permite interactuar fácilmente con los datos. También puedes personalizar tus conexiones para conservar y acceder a datos desde y hacia varias bases de datos y colecciones.
En tus aplicaciones, puedes implementar Doctrine MongoDB ODM, que es un mapeador de objetos-documentos (ODM) para MongoDB y PHP. Proporciona una forma de trabajar con MongoDB en Symfony, utilizando los mismos principios que Doctrine ORM para bases de datos relacionales.
Doctrine ODM te permite mapear objetos PHP en documentos de MongoDB y consultar MongoDB usando una API de generación. Este mapeo te permite usar otras funcionalidades de MongoDB, como el diseño de esquema flexible y búsquedas avanzadas. Para aprender más sobre esta biblioteca, consulta la sección de Recursos.
Tutorial de inicio rápido
Este tutorial te muestra cómo compilar una aplicación web utilizando Symfony, un framework de PHP. Incluye instrucciones sobre cómo conectar a un clúster de MongoDB alojado en MongoDB Atlas, acceder y mostrar datos de su base de datos.
Al utilizar MongoDB como almacén de datos en una aplicación web Symfony, puedes aprovechar el modelo de datos de documentos para crear expresiones de query ricas, lo que te permite interactuar fácilmente con los datos.
Tip
Si prefieres conectarte a MongoDB utilizando la librería MongoDB PHP sin Symfony, consulta Conectar a MongoDB en la documentación de la librería MongoDB PHP.
Esta guía utiliza Doctrine ODM para permitirle mapear objetos PHP a documentos MongoDB y consultar MongoDB usando una API builder.
Siga los pasos de esta guía para crear una aplicación web de Symfony de muestra que se conecte a una implementación de MongoDB y realice una query en la base de datos.
Requisitos previos
Para crear la aplicación Quick Start, necesitas tener instalados los siguientes programas en tu entorno de desarrollo:
Requisito previo | notas |
|---|---|
Asegúrate de que tu instalación de PHP incluya la extensión de MongoDB y que esté habilitada. Para confirmar la compatibilidad de la versión, consulta Compatibilidad. | |
Administrador de dependencias para PHP. | |
Herramienta de línea de comandos para gestionar aplicaciones Symfony. Para confirmar la compatibilidad, consulta la documentación de Symfony. | |
Una aplicación de terminal y Shell | Para los usuarios de MacOS, use Terminal o una aplicación similar. Para usuarios de Windows, utilizar PowerShell. |
Crear un clúster de MongoDB Atlas
MongoDB Atlas es un servicio de base de datos en la nube completamente gestionado que aloja tus implementaciones de MongoDB. Si no cuentas con una implementación de MongoDB, puedes crear un clúster de MongoDB gratis (sin necesidad de tarjeta de crédito) siguiendo los pasos en Comienza con Atlas. También demuestra cómo cargar conjuntos de datos de muestra en tu clúster, incluidos los datos que se utilizan en este tutorial.
Usted proporciona instrucciones al controlador sobre dónde y cómo conectarse a su clúster de MongoDB proporcionándole una cadena de conexión. Para recuperar tu cadena de conexión, sigue las instrucciones del tutorial Conéctate a tu clúster en la documentación de Atlas.
Tip
Guarda tu cadena de conexión en una ubicación segura.
Instalar el driver de PHP y Doctrine ODM
Accede a tu directorio de proyecto y luego añade el controlador PHP de MongoDB y el paquete Doctrine ODM a tu aplicación. El bundle integra la librería ODM en Symfony para que puedas leer y guardar objetos en MongoDB. Instalar el paquete también agrega automáticamente el controlador a tu proyecto. Para obtener más información, consulte Recursos en esta guía.
Ejecute los siguientes comandos para instalar el ODM:
composer require doctrine/mongodb-odm-bundle
Tip
Después de ejecutar los comandos anteriores, es posible que vea la siguiente solicitud:
Do you want to execute this recipe?
Selecciona yes de las opciones de respuesta para añadir la librería ODM a tu aplicación.
Para garantizar que Doctrine ODM esté habilitada en tu proyecto, verifica que tu archivo config/bundles.php contenga la entrada resaltada en el siguiente código:
return [ // ... Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true], ];
Configura la ODM
En el directorio config/packages, reemplaza el contenido de tu archivo doctrine_mongodb.yaml con el siguiente código:
doctrine_mongodb: auto_generate_proxy_classes: true auto_generate_hydrator_classes: true connections: default: server: "%env(resolve:MONGODB_URL)%" default_database: "%env(resolve:MONGODB_DB)%" document_managers: default: auto_mapping: true mappings: App: dir: "%kernel.project_dir%/src/Document" mapping: true type: attribute prefix: 'App\Document' is_bundle: false alias: App
Instalar dependencia de frontend
Este proyecto utiliza twig, el motor de plantillas por defecto para Symfony, para generar plantillas en esta aplicación. Ejecuta el siguiente comando para instalar el paquete twig:
composer require symfony/twig-bundle
Nota
Este paso puede dar lugar a un mensaje de error sobre variables de entorno no configuradas, pero este problema se resuelve en los pasos siguientes.
Modificar archivos de proyecto
Esta sección demuestra cómo modificar los archivos en tu proyecto restaurants para crear una aplicación web Symfony que muestre restaurantes que coincidan con criterios especificados.
Establecer Variables de Entorno
En el directorio raíz, navega hasta el archivo .env y define las siguientes variables de entorno para establecer la cadena de conexión y la base de datos de destino:
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
Para recuperar tu cadena de conexión, consulta Cadenas de conexión.
Crear entidad y controlador de restaurante
Crea el archivo Restaurant.php en el directorio src/Document y pega el siguiente código para crear una entidad que represente los documentos en la colección restaurants:
declare(strict_types=1); namespace App\Document; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM; #[ODM\Document(collection: 'restaurants')] class Restaurant { #[ODM\Id] public ?string $id = null; #[ODM\Field] public string $name; #[ODM\Field] public string $borough; #[ODM\Field] public string $cuisine; }
A continuación, crea el archivo RestaurantController.php en el directorio src/Controller y pega el siguiente código para gestionar los endpoints en tu aplicación:
declare(strict_types=1); namespace App\Controller; use App\Document\Restaurant; use Doctrine\ODM\MongoDB\DocumentManager; use MongoDB\BSON\Regex; use Psr\Log\LoggerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class RestaurantController extends AbstractController { private DocumentManager $dm; private LoggerInterface $logger; public function __construct(DocumentManager $dm, LoggerInterface $logger) { $this->dm = $dm; $this->logger = $logger; } ('/', name: 'restaurant_index', methods: ['GET']) public function index(Request $request): Response { return $this->render('restaurant/index.html.twig'); } ('/restaurant/browse', name: 'restaurant_browse', methods: ['GET']) public function browse(Request $request): Response { $restaurantRepository = $this->dm->getRepository(Restaurant::class); $queryBuilder = $restaurantRepository->createQueryBuilder(); $restaurants = $queryBuilder ->field('borough')->equals('Queens') ->field('name')->equals(new Regex('Moon', 'i')) ->getQuery() ->execute(); return $this->render('restaurant/browse.html.twig', ['restaurants' => $restaurants]); } }
El archivo controller define el método index(), que muestra un texto en la página principal de la aplicación web. El archivo también define el método browse(), que encuentra documentos en los que el campo borough es 'Queens' y el campo name contiene la cadena 'Moon'. Este método luego muestra los documentos en la ruta /restaurant/browse/. El método browse() utiliza la clase QueryBuilder para construir la query.
Personalizar plantillas
A continuación, crea plantillas para personalizar la apariencia de la aplicación web.
Crea el directorio templates/restaurant y llénalo con los siguientes archivos :
index.html.twigbrowse.html.twig
Pega el siguiente código en el archivo index.html.twig:
{# templates/restaurant/index.html.twig #} {% extends 'base.html.twig' %} {% block body %} <h1>Welcome to the Symfony MongoDB Quickstart!</h1> {% endblock %}
Pega el siguiente código en el archivo browse.html.twig:
{# templates/restaurant/browse.html.twig #} {% extends 'base.html.twig' %} {% block title %} Search Restaurants {% endblock %} {% block body %} <h1>Search Restaurants</h1> {% for restaurant in restaurants %} <p> <span style="color:deeppink;"><b>Name: </b>{{ restaurant.name }}</span><br> <b>Borough:</b> {{ restaurant.borough }}<br> <b>Cuisine:</b> {{ restaurant.cuisine }}<br> </p> {% endfor %} {% endblock %}
Inicie su aplicación Symfony
Ejecutá el siguiente comando desde el directorio raíz de la aplicación para iniciar tu servidor web integrado de PHP:
symfony server:start
Una vez que el servidor se inicia, emite el siguiente mensaje:
[OK] Web server listening The Web server is using PHP FPM 8.3.4 http://127.0.0.1:8000
Abra la URL http://127.0.0.1:8000/restaurant/browse en su navegador web. La página muestra una lista de restaurantes y detalles sobre cada uno de ellos, como se muestra en la siguiente captura de pantalla:

¡Felicidades por completar el tutorial de inicio rápido!
Después de completar estos pasos, contarás con una aplicación web Symfony que se conecta a tu implementación de MongoDB, ejecuta una query en los datos de muestra y renderiza un resultado recuperado.
Si deseas dejar tus comentarios sobre este tutorial, visita el Portal de comentarios de MongoDB.
Recursos
Aprenda más sobre Symfony y MongoDB consultando los siguientes recursos: