Menu Docs
Página inicial do Docs
/
Drivers
/

Symfony MongoDB Integration

Nesta página

  • Visão geral
  • Por que usar MongoDB em um aplicativo Symfony?
  • Início rápido
  • Pré-requisitos
  • Criar um cluster MongoDB Atlas
  • Instalar extensão MongoDB
  • Inicializar um projeto Symfony
  • Instale o Driver PHP e o Doctrine ODM
  • Instalar dependência frontend
  • Modificar arquivos do projeto
  • Inicie seu aplicativo Symfony
  • Recursos

Neste guia, você aprenderá sobre a integração do Symfony com o MongoDB e como usar essa estrutura para criar um aplicação web PHP simples. Você pode ler sobre os benefícios de usar o Symfony para construir aplicativos da web com o MongoDB como seu banco de dados de dados e prática de uso de bibliotecas que simplificam a consulta do MongoDB.

Symfony é uma estrutura flexível e altamente configurável para construir aplicativos PHP. Você pode usar essa estrutura para criar componentes reutilizáveis para simplificar seu aplicativo da web.

A seção Início rápido deste guia contém um tutorial que você pode seguir para criar um aplicativo de página única que acesse dados de uma coleção do MongoDB .

A seção Recursos contém links para recursos e documentação para aprendizado adicional.

Ao usar o MongoDB como um armazenamento de dados em um aplicação web Symfony, você pode aproveitar o modelo de dados do documento para criar expressões de query ricas, permitindo que você interaja facilmente com os dados. Você também pode personalizar suas conexões para persistir e acessar dados de e para vários bancos de dados e collections.

Em seus aplicativos, você pode implementar o Doctrine MongoDB ODM, que é um mapeador de documentos de objetos (ODM) para MongoDB e PHP. Ele fornece uma maneira de trabalhar com o MongoDB no Symfony, usando os mesmos princípios do Doctrine ORM para bancos de dados relacionais.

O Doctrine ODM permite mapear objetos PHP para documentos do MongoDB e consultar o MongoDB usando uma API de construtor. Esse mapeamento permite que você use outros recursos do MongoDB , como design de esquema flexível e pesquisas avançadas. Para saber mais sobre esta biblioteca, consulte a seção Recursos .

Este tutorial mostra como construir um aplicação da web usando Symfony, uma estrutura PHP. Ele inclui instruções sobre como se conectar a um cluster MongoDB hospedado no MongoDB Atlas e acessar e exibir dados de seu banco de dados de dados.

Ao usar o MongoDB como um armazenamento de dados em um aplicação web Symfony, você pode aproveitar o modelo de dados do documento para criar expressões de query ricas, permitindo que você interaja facilmente com os dados.

Dica

Se você preferir se conectar ao MongoDB usando a Biblioteca PHP do MongoDB sem Symfony, consulte Conectando-se ao MongoDB na documentação da Biblioteca PHP do MongoDB .

O MongoDB Atlas é um serviço de banco de dados em nuvem totalmente gerenciado que hospeda seu Implantações do MongoDB. Você pode criar sua própria implantação do MongoDB Atlas gratuita (nenhum cartão de crédito exigido) seguindo as etapas deste guia.

Este guia usa o Doctrine ODM para permitir que você mapeie objetos PHP para documentos do MongoDB e consulte o MongoDB usando uma API de construtor.

Siga as etapas deste guia para criar um exemplo de aplicação web Symfony que se conecta a um sistema MongoDB e executa uma query no banco de banco de dados.

Para criar o aplicativo Quick Start, você precisa do seguinte software instalado em seu ambiente de desenvolvimento:

  • PHP

  • Composer

  • Symfony CLI

  • Um aplicativo de terminal e shell. Para usuários do MacOS, use o Terminal ou um aplicativo semelhante. Para usuários do Windows, use o PowerShell.

Você deve criar um cluster MongoDB onde pode armazenar e gerenciar seus dados. Complete o guia Iniciar com Atlas para configurar uma nova conta Atlas e criar um agrupamento MongoDB de camada grátis . Este tutorial também demonstra como carregar conjuntos de dados de exemplo em seu cluster, incluindo os dados usados neste tutorial.

Você fornece instruções ao driver sobre onde e como se conectar ao cluster MongoDB fornecendo a ele uma string de conexão. Para recuperar a string de conexão, siga as instruções no tutorial Conectar ao Cluster na documentação do Atlas .

Dica

Salve sua string de conexão em um local seguro.

Para saber mais sobre como instalar a extensão MongoDB, consulte o tutorial Introdução à biblioteca PHP.

Execute o seguinte comando para criar um projeto de estrutura do Symfony chamado restaurants:

composer create-project symfony/skeleton restaurants

Insira o diretório do projeto e, em seguida, adicione o driver MongoDB PHP e o pacote Doctrine ODM ao seu aplicação. O pacote integra a biblioteca ODM ao Symfony para que você possa ler e escrever objetos no MongoDB. A instalação do pacote também adiciona automaticamente o driver ao seu projeto. Para saber mais, consulte a seção Recursos deste guia.

Execute os seguintes comandos para instalar o ODM:

composer require doctrine/mongodb-odm-bundle

Dica

Depois de executar os comandos anteriores, você poderá ver o seguinte prompt:

Do you want to execute this recipe?

Selecione yes nas opções de resposta para adicionar a biblioteca ODM ao seu aplicação.

Para garantir que o Doctrine ODM esteja ativado em seu projeto, verifique se o arquivo config/bundles.php contém a entrada destacada no código a seguir:

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

No diretório config/packages , substitua o conteúdo do seu arquivo doctrine_mongodb.yaml pelo seguinte 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

Este projeto utiliza o twig, o mecanismo de modelo padrão para Symfony, para gerar modelos neste aplicação. Execute o seguinte comando para instalar o pacote twig :

composer require symfony/twig-bundle

Observação

Essa etapa pode resultar em uma mensagem de erro sobre a desconfiguração de variáveis de ambiente, mas esse problema é resolvido nas etapas a seguir.

Esta seção demonstra como modificar os arquivos em seu projeto do restaurants para criar um aplicação web Symfony que exibe restaurantes que correspondem aos critérios especificados.

No diretório raiz, navegue até o arquivo .env e defina as seguintes variáveis de ambiente para definir sua string de conexão e banco de banco de dados de destino:

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

Para recuperar sua string de conexão, consulte a etapa Criar um Cluster MongoDB Atlas .

Crie o arquivo Restaurant.php no diretório src/Document e cole o seguinte código para criar uma entidade que representa documentos na coleção restaurants :

src/Document/Restaurant.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;
}

Em seguida, crie o arquivo RestaurantController.php no diretório src/Controller e cole o seguinte código para manipular os pontos de conexão em seu aplicação:

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]);
}
}

O arquivo do controlador define o método index() , que exibe o texto na página inicial do aplicativo da web. O arquivo também define o método browse() , que localiza documentos nos quais o campo borough é 'Queens' e o campo name contém a string 'Moon'. Esse método exibe os documentos na rota /restaurant/browse/ . O método browse() utiliza a classe QueryBuilder para construir a query.

Em seguida, crie modelos para personalizar a aparência do aplicativo da web.

Crie o diretório templates/restaurant e preencha-o com os seguintes arquivos:

  • index.html.twig

  • browse.html.twig

Cole o código abaixo no arquivo index.html.twig :

templates/restaurant/index.html.twig
{# templates/restaurant/index.html.twig #}
{% extends 'base.html.twig' %}
{% block body %}
<h1>Welcome to the Symfony MongoDB Quickstart!</h1>
{% endblock %}

Cole o código abaixo no arquivo 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 %}

Execute o seguinte comando a partir do diretório raiz do aplicativo para iniciar seu servidor da web integrado no PHP:

symfony server:start

Após o servidor iniciar, ele gera a seguinte mensagem:

[OK] Web server listening
The Web server is using PHP FPM 8.3.4
http://127.0.0.1:8000

Abra a URL http://127.0.0.1:8000/restaurant/browse em seu navegador. A página mostra uma lista de restaurantes e detalhes sobre cada um deles, conforme exibido na seguinte captura de tela:

Captura de tela da aplicação web de restaurantes

Parabéns por concluir o tutorial de início rápido!

Depois de concluir essas etapas, você tem um aplicação web do Symfony que se conecta à implementação do MongoDB , executa uma query nos dados de amostra e renderiza um resultado recuperado.

Saiba mais sobre Symfony e MongoDB visualizando os seguintes recursos:

Voltar

Driver PHP