如何指定 Symfony2 Form->handleRequest 使用的 EntityManager?
How do I specify the EntityManager used by Symfony2 Form->handleRequest?
我的 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
默认实体中确实不存在用户 table,因此此错误并不意外。我希望能够指定 handleRequest 函数检查 dev
EntityManager,其中用户 table 确实存在。
整个功能如下。当仅使用默认的 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
是一个函数,它会遍历并解析您的 Entity 注释并确保不违反 Constraints。在我的用户 table 中,我确定了一个 UniqueEntity 约束,该约束检查 My\Bundle\Entity\User.php
.
中的用户名字段
@UniqueEntity(fields="username", message="Username already taken")
具体来说,正是这个 Constraint 引用了默认的 EntityManager,而不是 handleRequest
的调用。删除此约束允许处理请求并保留表单。
因此,我将此问题标记为已回答。我将做更彻底的研究,看看我是否可以指定在检查约束时使用哪个 EntityManager,并在我仍然卡住的情况下创建一个新线程。
我遇到了完全相同的问题。似乎 handleRequest 方法使用了第一个可用的实体管理器,该管理器具有被持久化的实体的映射,但不一定是正确的。我也想知道如何指定另一个实体管理器。
是否有任何新的解决方案或更新?
我的 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
默认实体中确实不存在用户 table,因此此错误并不意外。我希望能够指定 handleRequest 函数检查 dev
EntityManager,其中用户 table 确实存在。
整个功能如下。当仅使用默认的 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
是一个函数,它会遍历并解析您的 Entity 注释并确保不违反 Constraints。在我的用户 table 中,我确定了一个 UniqueEntity 约束,该约束检查 My\Bundle\Entity\User.php
.
@UniqueEntity(fields="username", message="Username already taken")
具体来说,正是这个 Constraint 引用了默认的 EntityManager,而不是 handleRequest
的调用。删除此约束允许处理请求并保留表单。
因此,我将此问题标记为已回答。我将做更彻底的研究,看看我是否可以指定在检查约束时使用哪个 EntityManager,并在我仍然卡住的情况下创建一个新线程。
我遇到了完全相同的问题。似乎 handleRequest 方法使用了第一个可用的实体管理器,该管理器具有被持久化的实体的映射,但不一定是正确的。我也想知道如何指定另一个实体管理器。
是否有任何新的解决方案或更新?