【发布时间】:2015-01-01 13:36:13
【问题描述】:
我有以下控制器动作(非常简化):
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();
}
}
}
dashboard 是 Mongo Document 对象而不是实体。此代码在 $form->bind 行上失败,并出现以下 DBAL 错误:
PDOException: could not find driver
我假设这是因为我的 parameters.yml 文件中没有设置关系数据库。这个应用程序我只需要通过 Docker 运行的 Mongo。
如果没有安装数据库,是否可以运行带有表单验证等功能的 Symfony 和 Doctrine?不得不 dockerise 和管理一个不会纯粹用于满足 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
这会以某种方式影响表单验证器。通过删除该部分并仅使用学说 mongo 配置,错误得到了修复。
【问题讨论】:
-
symfony2 验证组件独立于数据库模式。错误消息是关于缺少 php mongo 驱动程序
-
驱动很好,因为我可以在没有表单验证组件的情况下读写 Mongo。仅当我尝试将其与表单结合时才会出现问题。更新了问题以显示模块输出。
-
有点题外话,但假设您使用的是 S2.1+,那么您可以稍微简化您的表单处理代码并避免使用一些贬值的方法。 symfony.com/doc/current/book/…
标签: php mysql mongodb symfony doctrine-orm