Symfony MongoDB Integration
在此页面上
Overview
在本指南中,您可以学习;了解Symfony MongoDB集成以及如何使用此框架构建简单的PHP Web应用程序。 您可以了解使用 Symfony构建以MongoDB作为数据库的 Web 应用程序的好处,并练习使用可简化MongoDB查询的库。
Symfony 是一个灵活且高度可配置的框架,用于构建PHP应用程序。 您可以使用此框架创建可重用的组件,从而简化您的 Web应用。
本指南的快速入门部分包含一个教程,您可以按照该教程构建一个用于访问MongoDB集合中的数据的单页面应用。
参考资料部分包含可供进一步学习的资源和文档链接。
为何在 Symfony 应用程序中使用MongoDB ?
通过将MongoDB用作 Symfony Web应用程序中的数据存储,您可以利用文档数据模型构建丰富的查询表达式,从而轻松地与数据进行交互。 您还可以自定义连接,以持久保存与多个数据库和集合之间的数据访问权限。
在您的应用程序中,您可以实现Doctrine MongoDB ODM ,它是适用于MongoDB和PHP的对象文档映射器 (ODM)。 它提供了一种在 Symfony 中使用MongoDB的方法,使用与关系数据库的 Doctrine ORM 相同的原理。
Doctrine ODM 允许您将PHP对象映射到MongoDB文档,并使用构建器API查询MongoDB 。 通过这种映射,您可以使用其他MongoDB功能,例如灵活的模式设计和高级搜索。 要学习;了解有关此库的更多信息,请参阅参考资料部分。
快速入门
本教程向您展示如何使用PHP框架Symfony构建Web应用程序。 它包括有关连接到MongoDB Atlas上托管的MongoDB 集群以及访问和显示数据库中的数据的说明。
通过将MongoDB用作 Symfony Web应用程序中的数据存储,您可以利用文档数据模型构建丰富的查询表达式,从而轻松地与数据进行交互。
提示
如果您更愿意使用MongoDB PHP库而不是 Symfony连接到MongoDB ,请参阅MongoDB PHP库文档中的连接到 MongoDB。
MongoDB Atlas 是完全托管的云数据库服务,旨在托管您的 MongoDB 部署。您可以按照本指南中的步骤创建您的免费(无需信用卡)MongoDB Atlas 部署。
本指南使用 Doctrine ODM,允许您将PHP对象映射到MongoDB文档,并使用构建器API查询MongoDB 。
按照本指南中的步骤创建一个示例Symfony Web应用程序,该应用程序连接到MongoDB 部署并对数据库执行查询。
先决条件
要创建快速入门应用程序,您需要在开发环境中安装以下软件:
终端应用程序和 Shell。对于 MacOS 用户,请使用终端或类似应用程序。对于 Windows 用户,请使用 PowerShell。
创建MongoDB Atlas集群
您必须创建一个MongoDB 集群,以便在其中存储和管理数据。 完成Atlas入门指南,设立新的Atlas帐户并创建免费套餐套餐MongoDB 集群。 本教程还演示了如何将示例数据集加载到集群中,包括本教程中使用的数据。
您可以通过为驾驶员提供连接 来指示连接到MongoDB string集群的位置和方式。要检索连接string ,请按照 Atlas文档中的“ 连接到集群”教程中的说明进行操作。
提示
将连接string保存在安全位置。
安装MongoDB扩展
要学习;了解有关安装MongoDB扩展的更多信息,请参阅PHP库手册中的安装扩展。
初始化 Symfony 项目
运行以下命令以创建名为 restaurants
的 Symfony项目框架:
composer create-project symfony/skeleton restaurants
安装PHP驱动程序和 Doctrine ODM
进入您的项目目录,然后将MongoDB PHP驾驶员和 Doctrine ODM 捆绑包添加到您的应用程序中。 该捆绑包将 ODM 库集成到 Symfony 中,以便您可以在MongoDB中读取和写入对象。 安装捆绑包还会自动将驾驶员添加到项目中。 要学习;了解更多信息,请参阅本指南的“参考资料”部分。
运行以下命令以安装 ODM:
composer require doctrine/mongodb-odm-bundle
提示
运行上述命令后,您可能会看到以下提示:
Do you want to execute this recipe?
从响应选项中选择yes
,将 ODM 库添加到您的应用程序中。
要确保在您的项目中启用了 Doctrine ODM,请验证您的config/bundles.php
文件是否包含以下代码中突出显示的条目:
return [ // ... Doctrine\Bundle\MongoDBBundle\DoctrineMongoDBBundle::class => ['all' => true], ];
配置 ODM
在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
安装前端依赖项
此项目使用twig
(Symfony 的默认模板引擎)在此应用程序中生成模板。 运行以下命令以安装twig
捆绑包:
composer require symfony/twig-bundle
注意
此步骤可能会导致出现有关未设置环境变量的错误消息,但此问题已在以下步骤中得到解决。
修改项目文件
本部分演示如何修改restaurants
项目中的文件以创建 Symfony Web应用程序,该应用程序显示符合指定条件的餐厅。
设置环境变量
在根目录中,导航到 .env
文件并定义以下环境变量,以设立连接string和目标数据库:
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
要检索连接string ,请参阅创建MongoDB Atlas集群步骤。
创建餐厅实体和控制器
在src/Document
目录中创建Restaurant.php
文件并粘贴以下代码,以创建表示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; }
接下来,在src/Controller
目录中创建RestaurantController.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; } '/', 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]); } }
控制器文件定义index()
方法,该方法在 Web 应用程序的首页上显示文本。 该文件还定义了 browse()
方法,用于查找 borough
字段为 'Queens'
且 name
字段包含string 'Moon'
的文档。 然后,此方法显示/restaurant/browse/
路由处的文档。 browse()
方法使用QueryBuilder
类来构造查询。
自定义模板
接下来,创建模板以自定义 Web 应用程序的外观。
创建templates/restaurant
目录并在其中填充以下文件:
index.html.twig
browse.html.twig
将以下代码粘贴到index.html.twig
文件:
{# templates/restaurant/index.html.twig #} {% extends 'base.html.twig' %} {% block body %} <h1>Welcome to the Symfony MongoDB Quickstart!</h1> {% endblock %}
将以下代码粘贴到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 %}
启动您的 Symfony 应用程序
从应用程序根目录运行以下命令,启动 PHP 内置 Web 服务器:
symfony server:start
服务器启动后,输出以下消息:
[OK] Web server listening The Web server is using PHP FPM 8.3.4 http://127.0.0.1:8000
打开URL http://127.0.0.1 :8000 /restaurant/browse 在网络浏览器中。该页面显示了餐厅列表以及每家餐厅的详细信息,如以下屏幕截图所示:
恭喜您完成快速入门教程!
完成这些步骤后,您就有一个 Symfony Web应用程序,它可以连接到MongoDB 部署、对示例数据运行查询并呈现检索到的结果。
资源
查看以下资源,了解详情有关 Symfony 和MongoDB的更多信息: