我有以下控制器操作(简化):
public function createAction()
{
$request = $this->getRequest();
$form = $this->createForm(
new DashboardType(),
new Dashboard()
);
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
$dm = $this->get('doctrine_mongodb')
->getManager();
$dm->persist($dashboard);
$dm->flush();
}
}
}
其中仪表板是Mongo Document对象而不是实体。此代码在$ form->绑定行上失败,并出现以下DBAL错误:
PDOException: could not find driver
我假设这是因为我没有在我的parameters.yml文件中设置关系数据库。我需要的所有这个应用程序是通过Docker运行的Mongo。
如果没有安装数据库,是否可以使用表单验证等功能运行Symfony和Doctrine?有必要停靠和管理一个不会完全用于满足Symfony要求的MySQL实例似乎毫无意义。
有解决方法吗?
更新
这不是驱动程序问题,因为我可以在没有形式值的情况下读取和写入Mongo。来自模块的编辑回复:
$ php -m
[PHP Modules]
mongo
PDO
解决方案
默认情况下,Symfony将以下内容添加到config.yml
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
# if using pdo_sqlite as your database driver:
# 1. add the path in parameters.yml
# e.g. database_path: "%kernel.root_dir%/data/data.db3"
# 2. Uncomment database_path in parameters.yml.dist
# 3. Uncomment next line:
# path: "%database_path%"
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
这会以某种方式影响表单验证器。通过删除该部分并仅具有doctrine mongo配置,错误是固定的。
答案 0 :(得分:1)
您应该将Symfony配置为使用MongoDB作为持久性系统。
您可以在Symfony doc的DoctrineMongoDBBundle上找到设置过程:
http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html