我的Symfony2应用程序有多个EntityManagers。我已设置默认值,然后列出其他几个。除了Forms之外,此配置在我的代码中起作用并且起作用。
当尝试处理请求时,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
确实,User表并不存在于默认实体上,因此该错误并非意外。我希望能够指定handleRequest函数检查用户表存在的dev
EntityManager。
整个功能如下。当仅使用默认的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: ~
答案 0 :(得分:0)
事实证明handleRequest
是通过并解析您的实体注释并确保不违反约束的函数。在我的User表中,我确定了一个UniqueEntity约束,该约束检查了My\Bundle\Entity\User.php
内的用户名字段。
@UniqueEntity(fields="username", message="Username already taken")
具体来说,正是这个Constraint引用了默认的EntityManager,而不是handleRequest
的调用。删除此约束允许处理请求并保留表单。
因此,我正在回答这个问题。我将进行更深入的研究,看看我是否可以在检查约束时指定使用哪个EntityManager,并在我仍然卡住的情况下创建一个新线程。
答案 1 :(得分:0)
我遇到了完全相同的问题。似乎handleRequest方法使用第一个可用的实体管理器,该实体管理器具有被保持的实体的映射,这不一定是正确的实体。我还想知道如何指定另一个实体管理器。
是否有新的解决方案或更新?