如何在Symfony 4.0中配置DoctrineMongoDBBundle?
在Symfony 4.0中配置DoctrineMongoDBBundle的完整步骤
我来帮你搞定Symfony4里配置DoctrineMongoDBBundle的问题,毕竟Symfony4确实把原来的配置文件结构改了不少,一步步来:
1. 先安装DoctrineMongoDBBundle
首先用Composer安装兼容Symfony4的版本,直接运行命令就行:
composer require doctrine/mongodb-odm-bundle
Composer会自动帮你匹配适合Symfony4的bundle版本,不用手动指定。
2. 配置环境变量(替代原来的parameters.yml)
Symfony4用.env系列文件管理环境变量,打开项目根目录的.env(或者.env.local,这个文件不会被提交到版本库,更适合本地配置),添加MongoDB的连接信息:
# .env.local MONGODB_URL=mongodb://localhost:27017 MONGODB_DB=your_database_name # 替换成你要使用的数据库名
如果你的MongoDB需要用户名密码,就改成:
MONGODB_URL=mongodb://username:password@localhost:27017
3. 创建MongoDB配置文件(替代原来的config.yml)
在config/packages/目录下新建doctrine_mongodb.yaml文件,写入以下配置:
doctrine_mongodb: connections: default: # 读取环境变量里的连接地址 server: '%env(resolve:MONGODB_URL)%' options: {} # 默认数据库 default_database: '%env(MONGODB_DB)%' document_managers: default: auto_mapping: true mappings: App: is_bundle: false type: annotation # 用注解方式映射文档 dir: '%kernel.project_dir%/src/Document' # 文档类存放目录 prefix: 'App\Document' # 文档类的命名空间前缀 alias: App
这里配置了文档管理器的自动映射,指定了我们的文档类放在src/Document目录下,用注解做映射。
4. 创建你的第一个MongoDB文档(实体)
在src/Document目录下新建你的文档类,比如User.php:
<?php namespace App\Document; use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; /** * @MongoDB\Document(collection="users") # 可选:指定MongoDB里的集合名,默认是类名小写复数 */ class User { /** * @MongoDB\Id */ private $id; /** * @MongoDB\Field(type="string") */ private $name; /** * @MongoDB\Field(type="integer") */ private $age; // Getters和Setters public function getId() { return $this->id; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getAge(): ?int { return $this->age; } public function setAge(int $age): self { $this->age = $age; return $this; } }
5. 测试配置是否生效
可以用Symfony的命令行工具测试连接:
# 查看MongoDB连接状态 php bin/console doctrine:mongodb:connection:status # 尝试创建一条测试数据 php bin/console doctrine:mongodb:query:create
或者在控制器里注入DocumentManager来操作数据,比如:
<?php namespace App\Controller; use App\Document\User; use Doctrine\ODM\MongoDB\DocumentManager; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class UserController extends AbstractController { public function createUser(DocumentManager $dm): Response { $user = new User(); $user->setName('WenKang Lin'); $user->setAge(30); $dm->persist($user); $dm->flush(); return new Response("Created user with ID: {$user->getId()}"); } }
访问对应的路由,就能看到用户创建成功的提示了。
内容的提问来源于stack exchange,提问作者wenkang lin
相关产品推荐
相关产品推荐

