Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony @路线-如何确保条令也检查父实体_Symfony_Doctrine Orm_Annotations_Doctrine_Symfony 3.4 - Fatal编程技术网

Symfony @路线-如何确保条令也检查父实体

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

我的项目中有一些路线是长期父子关系的结果

问题是Symfony只根据实体的ID搜索实体,而忽略路由中的所有其他参数

例如,我有以下路线:

@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])
或一个更复杂的查询一样简单。

我明白了,我正在考虑从
障碍
参数中删除类型,添加另外两个,并使用一个自定义函数。我想也是这样。谢谢。我知道了,我正在考虑从
障碍
参数中删除类型,添加另外两个,并使用自定义函数。我想也是这样。谢谢