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 usar MongoDB como almacén de datos en una aplicación web Symfony, puedes aprovechar el modelo de datos del documento para crear expresiones de consulta completas, lo que te permite interactuar fácilmente con los datos. También puedes personalizar tus conexiones para que persistan y accedan a los datos desde y hacia múltiples 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 crear una aplicación web con Symfony, un framework PHP. Incluye instrucciones para conectarte a un clúster MongoDB alojado en MongoDB Atlas y acceder y mostrar datos de tu 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 prefiere conectarse a MongoDB utilizando la biblioteca PHP de MongoDB sin Symfony, consulte Conectarse a MongoDB en la documentación de la biblioteca PHP de MongoDB.
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 Symfony de muestra que se conecte a una implementación de MongoDB y realice una consulta en la base de datos.
Requisitos previos
Para crear la aplicación de inicio rápido, necesita el siguiente software instalado en su entorno de desarrollo:
Requisito previo | notas |
|---|---|
Asegúrese de que su instalación de PHP incluya la extensión MongoDB y esté habilitada. Para confirmar la compatibilidad de versiones, consulte 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 usuarios de macOS, usen Terminal o una aplicación similar. Para usuarios de Windows, usen 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.
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 recuperarla, siga las instrucciones del tutorial "Conectarse a su 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 el siguiente mensaje:
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], ];
Configurar el 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 predeterminado de Symfony, para generar plantillas en esta aplicación. Ejecute 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 de restaurante y controlador
Cree el archivo Restaurant.php en el directorio src/Document y pegue el siguiente código para crear una entidad que represente los documentos de 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 del controlador define el método index(), que muestra texto en la página principal de la aplicación web. El archivo también define el método browse(), que busca documentos cuyo campo borough sea 'Queens' y cuyo campo name contenga la cadena 'Moon'. Este método muestra los documentos en la ruta /restaurant/browse/. El método browse() utiliza la clase QueryBuilder para construir la consulta.
Personalizar plantillas
A continuación, cree plantillas para personalizar la apariencia de la aplicación web.
Cree el directorio templates/restaurant y rellénelo con los siguientes archivos:
index.html.twigbrowse.html.twig
Pegue 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 %}
Pegue 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
Obtenga más información sobre Symfony y MongoDB consultando los siguientes recursos: