Overview
在本指南中,您可以学习;了解Symfony MongoDB集成以及如何使用此框架构建简单的PHP Web应用程序。 您可以了解使用 Symfony构建以MongoDB作为数据库的 Web 应用程序的好处,并练习使用可简化MongoDB查询的库。
Symfony 是一个灵活且高度可配置的框架,用于构建PHP应用程序。您可以使用此框架创建可重用的组件,从而简化您的 Web应用。
为何在 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。
本指南使用 Doctrine ODM,允许您将PHP对象映射到MongoDB文档,并使用构建器API查询MongoDB 。
按照本指南中的步骤创建一个示例Symfony Web应用程序,该应用程序连接到MongoDB 部署并对数据库执行查询。
先决条件
要创建快速入门应用程序,您需要在开发环境中安装以下软件:
先决条件 | 注意 |
|---|---|
PHP的依赖管理器。 | |
用于管理 Symfony 应用程序的命令行工具。要确认兼容性,请参阅 Symfony 文档。 | |
终端应用和Shell | 对于 MacOS 用户,请使用终端或类似应用程序。对于 Windows 用户,请使用 PowerShell。 |
创建MongoDB Atlas集群
MongoDB Atlas是一项完全托管云数据库服务,用于托管MongoDB部署。如果您没有MongoDB 部署,可以通过完成Atlas入门教程免费创建MongoDB 集群(无需信用)。本教程还演示了如何将示例数据集加载到集群中,包括本教程中使用的数据。
您可以通过为驱动程序提供连接字符串来指示连接到MongoDB 集群的位置和方式。要检索您的连接字符串,请按照Atlas文档中的连接到您的集群教程中的说明进行操作。
提示
将连接string保存在安全位置。
安装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
修改项目文件
本部分演示如何修改restaurants项目中的文件以创建 Symfony Web应用程序,该应用程序显示符合指定条件的餐厅。
设置环境变量
在根目录中,导航到 .env文件并定义以下环境变量,以设立连接string和目标数据库:
... MONGODB_URL=<your Atlas connection string> MONGODB_DB=sample_restaurants
创建餐厅实体和控制器
在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.twigbrowse.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的更多信息: