php - 如何指定 Symfony2 Form->handleRequest 使用的 EntityManager?

标签 php symfony doctrine entitymanager

我的 Symfony2 应用程序有多个 EntityManager。我设置了默认值,然后列出了其他一些值。此配置在我的代码(表单除外)中有效且有效。

尝试处理请求时,handleRequest(mixed $request = null) 出现错误,因为我尝试验证表单的实体类型在默认管理器中不存在,但在另一个里面。

有没有办法指定使用哪个实体管理器来处理请求?

$form = $this->createForm(
    new UserType(), $user
);

$form->handleRequest($request); // $request is coming from form submission

我得到的错误很清楚:

An exception occurred while executing [select statement appears here]

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'DEFAULTENTITY.User' doesn't exist

默认实体上确实不存在用户表,因此此错误并不意外。我希望能够指定handleRequest 函数检查dev EntityManager,其中User 表确实存在。 该函数的完整内容如下。当仅使用默认的 EntityManager 时,此函数可以完美运行,但当我实现多管理器环境时,该函数就会崩溃:

public function addAction(Request $request)
{
    $user = new User();

    $form = $this->createForm(new UserType(), $user);

    $form->handleRequest($request);

    // Respond to a form submission
    if ( $form->isValid()) {
            $em = $this->getDoctrine()->getManager( $this->currentManagerID );
            $em->persist($user);
            $em->flush();
            return $this->redirect($this->generateUrl('user_add'));
    }

    // Render the form
    return $this->render(
            'MyBundle:User:create.html.twig',
            array('form' => $form->createView())
    );
}

我的多实体 Doctrine 配置适用于应用程序的所有其他方面。我可以利用默认管理器加载应用程序范围的设置,并使用子域选择一个 EntityManager 来检查登录、选择、机构特定设置等。

orm:
    default_entity_manager: default
    auto_generate_proxy_classes: "%kernel.debug%"
    entity_managers:
        default:
            connection: default
            mappings:
                MyBundle: ~
        dev:
            connection: dev
            mappings:
                MyBundle: ~

最佳答案

事实证明,handleRequest 是遍历并解析实体注释并确保不违反约束的函数。在我的 User 表中,我确定了一个 UniqueEntity 约束,该约束检查 My\Bundle\Entity\User.php 内的用户名字段。

@UniqueEntity(fields="用户名", message="用户名已被占用")

具体来说,正是这个 Constraint 引用了默认的 EntityManager,而不是 handleRequest 的调用。删除此约束允许处理请求并保留表单。

因此,我将此问题标记为已回答。我将做更彻底的研究,看看是否可以指定在检查约束时使用哪个 EntityManager,并在我仍然卡住的情况下创建一个新线程。

关于php - 如何指定 Symfony2 Form->handleRequest 使用的 EntityManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29304564/

相关文章:

php - Symfony 和 Twig 模板。如何动态扩展模板或什么也不扩展?

php - Symfony 2.7 选择回调在表单中不起作用

php - 显示 � 而不是 £

php - 检查 MongoDB 中是否存在具有字段值的文档的最佳做法是什么?

php - 取消清理 mysql 或 php 中的 url

symfony - Doctrine postPersist 事件已弃用 getEntity 函数

php - 对象关系映射与数据库抽象层

php - 我真的需要正则表达式来检查输入字段是否为整数吗?

Symfony2 服务容器 : Inject array of services parameter as an argument to another service using XML

forms - 在 Twig 中设置 Symfony 2 表单域的默认值