Overview
En esta guía, aprenderá sobre la integración de Symfony con MongoDB y cómo usar este framework para crear una aplicación web PHP sencilla. También podrá leer sobre las ventajas de usar Symfony para crear aplicaciones web con MongoDB como base de datos y practicar el uso de bibliotecas que simplifican las consultas en MongoDB.
Symfony es un framework flexible y altamente configurable para crear aplicaciones PHP. Puedes usarlo para crear componentes reutilizables y optimizar tu aplicación web.
¿Por qué utilizar 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 sus aplicaciones, puede implementar Doctrine MongoDB ODM, un mapeador de objetos y documentos (ODM) para MongoDB y PHP. Permite trabajar con MongoDB en Symfony, utilizando los mismos principios que Doctrine ORM para bases de datos relacionales.
Doctrine ODM permite mapear objetos PHP a documentos MongoDB y realizar consultas en MongoDB mediante una API de compilación. Esta asignación permite usar otras funciones de MongoDB, como el diseño flexible de esquemas y las búsquedas avanzadas. Para obtener más información sobre esta biblioteca, consulte la sección 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, puede aprovechar el modelo de datos del documento para crear expresiones de consulta enriquecidas, lo que le 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 un shell | Para usuarios de macOS, usen Terminal o una aplicación similar. Para usuarios de Windows, usen PowerShell. |
Crear un clúster Atlas de MongoDB
MongoDB Atlas es un servicio de base de datos en la nube totalmente administrado que aloja sus implementaciones de MongoDB. Si no tiene una implementación de MongoDB, puede crear un clúster de MongoDB gratis (sin tarjeta de crédito) completando el tutorial "Comenzar con Atlas". Este tutorial también muestra cómo cargar conjuntos de datos de muestra en su clúster, incluidos los datos utilizados 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
Guarde su cadena de conexión en una ubicación segura.
Instalar el controlador PHP y Doctrine ODM
Accede al directorio de tu proyecto y añade el controlador PHP de MongoDB y el paquete Doctrine ODM a tu aplicación. El paquete integra la biblioteca ODM en Symfony para que puedas leer y escribir objetos en MongoDB. Al instalar el paquete, el controlador se añade automáticamente a tu proyecto. Para obtener más información, consulta la sección Recursos de 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?
Seleccione yes de las opciones de respuesta para agregar la biblioteca ODM a su aplicación.
Para asegurarse de que Doctrine ODM esté habilitado en su proyecto, verifique que su 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, reemplace el contenido de su 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 generar un mensaje de error sobre variables de entorno no establecidas, pero este problema se resuelve en los siguientes pasos.
Modificar archivos de proyecto
Esta sección demuestra cómo modificar los archivos en su proyecto restaurants para crear una aplicación web Symfony que muestre los restaurantes que coinciden con los criterios especificados.
Establecer variables de entorno
En el directorio raíz, navegue hasta el archivo .env y defina las siguientes variables de entorno para configurar su cadena de conexión y base de datos de destino:
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
Para recuperar su cadena de conexión, consulte 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, cree el archivo RestaurantController.php en el directorio src/Controller y pegue el siguiente código para manejar los puntos finales en su 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
Ejecute el siguiente comando desde el directorio raíz de la aplicación para iniciar su servidor web integrado PHP:
symfony server:start
Una vez iniciado el servidor, se muestra 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 de cada uno, como se muestra en la siguiente captura de pantalla:

¡Felicitaciones por completar el tutorial de inicio rápido!
Después de completar estos pasos, tendrá una aplicación web Symfony que se conecta a su implementación de MongoDB, ejecuta una consulta en los datos de muestra y genera 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: