【问题标题】:Is it possible to use Symfony2/Doctrine form validation without a relational database?是否可以在没有关系数据库的情况下使用 Symfony2/Doctrine 表单验证?
【发布时间】: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


【解决方案1】:

您应该配置 Symfony 以使用 MongoDB 作为持久性系统。

你可以在 Symfony 文档的 DoctrineMongoDBBundle 中找到设置过程:

http://symfony.com/doc/current/bundles/DoctrineMongoDBBundle/index.html

【讨论】:

  • 这正是我设置它的方式,它工作正常。该错误仅在将请求对象绑定到基于文档的表单时发生。
  • 你的配置文件是什么样子的?
  • 啊,我刚刚修好了。这是由于 Symfony 在 config.yml 中添加了一个默认的 Doctrine DBAL 部分,这不是必需的,并且在表单验证中以某种方式被引用。删除整个部分后,一切都开始工作了。为我指明正确的方向而欢呼。
  • 酷,请将您的问题设置为已关闭,谢谢,新年快乐!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多