我必须在项目中使用Symfony 4和MongoDB。我可以像这样访问控制器中的DocumentManager:
$dm = $this->get('doctrine_mongodb')->getManager();在运行时,但不像其他服务(例如Doctrine EntityManager)通过任何方法或构造函数的参数。所以我不知道如何在服务中达到它。如果我不在services.yaml中注册它,Symfony就找不到它,这是很明显的。但如果我尝试注册:
Doctrine\:
resource: '../vendor/doctrine/mongodb-odm/lib/Doctrine/*'它也返回一个错误:(1/1) FatalErrorException编译错误:不能使用'Bool‘作为类名,因为它是在Bool.php中保留的(第26行)
它似乎与php 7不兼容,而Symfony 4却需要它。
有谁知道如何解决这个矛盾吗?
提前感谢!
发布于 2018-03-10 04:13:28
我找到了一个可能对其他人有用的解决方案: dev-master / 3.5.x-dev版本的doesn/mongodb-odm-bundle不会出现问题。https://packagist.org/packages/doctrine/mongodb-odm-bundle#dev-master最初的composer.json需要"^3.0“,所以composer下载了3.4.1,这是最新的稳定版本。将版本修改为"3.5.x-dev“至少在开发时解决了这个问题。
发布于 2019-08-15 01:35:08
您可以注入ManagerRegistry并从中获取管理器
<?php
use Doctrine\Bundle\MongoDBBundle\ManagerRegistry;
class SomeController
{
public function someAction(ManagerRegistry $managerRegistry)
{
$user = new Object();
$user->setName("John");
$dm = $managerRegistry->getManager();
$dm->persist($user);
$dm->flush();
//do something
}
}https://stackoverflow.com/questions/48855805
复制相似问题