我的 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/