Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Symfony MongoDB Integration

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.

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.

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.

1

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.

2

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.

3

Ejecuta el siguiente comando en tu terminal para crear un proyecto básico de Symfony llamado restaurants:

composer create-project symfony/skeleton restaurants
4

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:

config/bundles.php
return [
// ...
Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true],
];

En el directorio config/packages, reemplaza el contenido de tu archivo doctrine_mongodb.yaml con el siguiente código:

config/packages/doctrine_mongodb.yaml
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
5

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.

6

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.

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:

.env
...
MONGODB_URL=<your Atlas connection string>
MONGODB_DB=sample_restaurants

Para recuperar tu cadena de conexión, consulta Cadenas de conexión.

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:

src/documento/Restaurante.php
<?php
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:

src/Controller/RestaurantController.php
<?php
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;
}
#[Route('/', name: 'restaurant_index', methods: ['GET'])]
public function index(Request $request): Response
{
return $this->render('restaurant/index.html.twig');
}
#[Route('/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.

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.twig

  • browse.html.twig

Pegue el siguiente código en el archivo index.html.twig:

plantillas/restaurante/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
{# 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 %}
7

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:

Captura de pantalla de la aplicación web de Restaurantes

¡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.

Obtenga más información sobre Symfony y MongoDB consultando los siguientes recursos:

Volver

Actualizar

En esta página