【发布时间】:2015-06-01 00:14:44
【问题描述】:
我的 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
默认实体上确实不存在 User 表,因此此错误并非意外。我希望能够指定 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: ~
【问题讨论】:
-
你完成
$ php app/console doctrine:schema:update --force了吗? -
我有;需要明确的是(这是我第一次在这里发帖,我可能不是),多个 EntityProviders 的使用适用于应用程序的各个方面——登录、选择(用于表等)、获取数据等。问题当我使用 Form Builder 时,我遇到了:handleRequest 的内置功能正在检查 Doctrine 的默认 EntityManager。如果有
handleRequest($request, $em)选项,那就太好了。由于没有,我希望有一种方法来指定我想使用的经理。 -
对,抱歉,我无法为您提供更多帮助,我在
SF应用程序中从未使用过多个 EntityManager。 -
你确定是 handleRequest() 造成的吗?也许它是对数据库的持久化?
-
我是——我通过使用 die() 捕获了“断点”。直接放置在handleRequest()函数之前,之后直接在die()处理之前抛出异常。
标签: php symfony doctrine entitymanager