Symfony @路线-如何确保条令也检查父实体
我的项目中有一些路线是长期父子关系的结果 问题是Symfony只根据实体的ID搜索实体,而忽略路由中的所有其他参数 例如,我有以下路线:Symfony @路线-如何确保条令也检查父实体,symfony,doctrine-orm,annotations,doctrine,symfony-3.4,Symfony,Doctrine Orm,Annotations,Doctrine,Symfony 3.4,我的项目中有一些路线是长期父子关系的结果 问题是Symfony只根据实体的ID搜索实体,而忽略路由中的所有其他参数 例如,我有以下路线: @Route("/projets/projet-{projet}/murs/mur-{mur}/obstacles/obstacle-{id}/", name="obstacle_edit") editAction(Request $request, Obstacle $obstacle) {} 这里,障碍就是我要寻找的实体。 mur是$barrier->g
@Route("/projets/projet-{projet}/murs/mur-{mur}/obstacles/obstacle-{id}/", name="obstacle_edit")
editAction(Request $request, Obstacle $obstacle) {}
这里,障碍
就是我要寻找的实体。mur
是$barrier->getMur()
而
projet
是barrier->getMur()->getProjet()
因此,我的表单
标记如下:
<form action="{{ path('obstacle_edit', { 'projet': obstacle.mur.projet.id, 'mur': obstacle.mur.id, 'id': obstacle.id }) }}" method="POST"></form
/**
* @Route("/projets/projet-{projet}/murs/mur-{mur}/obstacles/obstacle-{id}/", name="obstacle_edit")
* @Entity("obstacle", expr="repository.findObstacleByProjectMurAndId(projet, mur, id)")
*/
public function editAction(Request $request, Obstacle $obstacle) { ... }
因此,忽略路由中的其他两个参数
如何确保不会忽略其他参数?可以通过使用注释显式重写行为来修改实体的加载方式。见: 在您的情况下,它可能看起来像这样:
<form action="{{ path('obstacle_edit', { 'projet': obstacle.mur.projet.id, 'mur': obstacle.mur.id, 'id': obstacle.id }) }}" method="POST"></form
/**
* @Route("/projets/projet-{projet}/murs/mur-{mur}/obstacles/obstacle-{id}/", name="obstacle_edit")
* @Entity("obstacle", expr="repository.findObstacleByProjectMurAndId(projet, mur, id)")
*/
public function editAction(Request $request, Obstacle $obstacle) { ... }
然后放入此存储库的实际查询逻辑。根据您的具体需求,这可以像包装一个
findBy(['mur'=>$mur,'projet'=>$projet,'id'=>$id])
或一个更复杂的查询一样简单。您可以通过使用注释显式重写行为来修改实体的加载方式。见:
在您的情况下,它可能看起来像这样:
<form action="{{ path('obstacle_edit', { 'projet': obstacle.mur.projet.id, 'mur': obstacle.mur.id, 'id': obstacle.id }) }}" method="POST"></form
/**
* @Route("/projets/projet-{projet}/murs/mur-{mur}/obstacles/obstacle-{id}/", name="obstacle_edit")
* @Entity("obstacle", expr="repository.findObstacleByProjectMurAndId(projet, mur, id)")
*/
public function editAction(Request $request, Obstacle $obstacle) { ... }
然后放入此存储库的实际查询逻辑。根据您的具体需求,这可以像包装一个
findBy(['mur'=>$mur,'projet'=>$projet,'id'=>$id])
或一个更复杂的查询一样简单。我明白了,我正在考虑从障碍参数中删除类型,添加另外两个,并使用一个自定义函数。我想也是这样。谢谢。我知道了,我正在考虑从障碍
参数中删除类型,添加另外两个,并使用自定义函数。我想也是这样。谢谢