Symfony 具有不同前缀的重复资源

Symfony 具有不同前缀的重复资源,symfony,Symfony,[设置] Symfony 3 DollEntity,可以作为自身的子实体 巧克力实体,是DollEntity的子实体 [问题] 我的DollEntity像一个俄罗斯娃娃,因此,一个娃娃可以包含另一个娃娃。 巧克力实体将位于第一个或第二个玩偶内 我的问题是我不知道如何通过两种不同的途径得到巧克力 src/AppBundle/Resources/config/doll.yml sub_doll_chocolate将起作用,而doll_chocolate将向我返回一个route not found

[设置]

  • Symfony 3
  • DollEntity
    ,可以作为自身的子实体
  • 巧克力实体
    ,是DollEntity的子实体
[问题]

我的
DollEntity
像一个俄罗斯娃娃,因此,一个娃娃可以包含另一个娃娃。
巧克力实体
将位于第一个或第二个玩偶内

我的问题是我不知道如何通过两种不同的途径得到巧克力

src/AppBundle/Resources/config/doll.yml

sub_doll_chocolate
将起作用,而
doll_chocolate
将向我返回一个route not found错误

通过测试,我发现我也做不到这一点

doll_chocolate:
    resource: "@AppBundle/Resources/config/chocolate.yml"
    prefix: /doll/{idDoll}/
    prefix: /doll/{parent}/subDoll/{idDoll}/

如何使这两条路线正常工作?

有没有一种方法可以为单个资源设置多个前缀?

我不太确定,但我不认为用“/”结束路由是一种好的做法。symfony的总体思路是,它匹配它认为合适的第一条路线。因此,您还应该在到达doll_巧克力之前检查其他路线是否不匹配(这就是为什么在每个右端使用“/”符号可能会出现问题)。我还建议您将不太具体的url放在前面(这样doll_chocolate就放在doll_new之后,而这两条路径都放在doll_index路径之后),您还应该检查您在浏览器中键入的url是否以“/”结尾,因为它与路径不匹配我不太确定,但我不认为用“/”结束你的路线是一种好的做法。symfony的总体思路是,它匹配它认为合适的第一条路线。因此,您还应该在到达doll_巧克力之前检查其他路线是否不匹配(这就是为什么在每个右端使用“/”符号可能会出现问题)。我还建议您将不太具体的url放在前面(这样doll_chocolate就放在doll_new之后,而这两条路由都放在doll_index路由之后),您还应该检查您在浏览器中键入的url是否以“/”结尾,因为它与Symfony 4.1的路由不匹配,所以您可以使用路由id前缀。

这意味着您可以执行以下操作:

sub_doll_chocolate:
    idprefix: sub_doll_
    resource: "@AppBundle/Resources/config/chocolate.yml"
    prefix:   /doll/{parent}/subDoll/{idDoll}/

注意:您已经可以使用类似于FOSRest的东西,使用Symfony 4.1,您将能够拥有路由id前缀。

这意味着您可以执行以下操作:

sub_doll_chocolate:
    idprefix: sub_doll_
    resource: "@AppBundle/Resources/config/chocolate.yml"
    prefix:   /doll/{parent}/subDoll/{idDoll}/


注意:您已经可以使用类似于FOSRest的方法了

是的,您可以对一个操作使用多个路由,只要您为每个路由定义了唯一的标识符。不要忘记导入从app/routing.yml开始的路由。重复:@FrankB我确实在发布之前找到了这个主题。。。但我的有点不同。我使用的不是
partern/defaults
,而是
resource/prefix
。当我在链接的主题中像这样做时,Symfony似乎没有找到第一个
资源/模式集。我猜那是因为我提供了两次
资源
,但我不知道如何解决。你有没有试着把
娃娃巧克力
的定义放在
娃娃巧克力
之前?为什么
.yml.yml
?@Matteo是的,我试过了,它只会扭转问题,一个会给我找不到的路线,而另一个会工作。和.yml.yml是唯一的编辑错误。Sorry@FrankB我只是明白为什么我问的不可能。。。我不知道哪条路线是什么。。。感谢linkYes,只要为每个路由定义唯一标识符,就可以将多个路由用于一个操作。不要忘记导入从app/routing.yml开始的路由。重复:@FrankB我确实在发布之前找到了这个主题。。。但我的有点不同。我使用的不是
partern/defaults
,而是
resource/prefix
。当我在链接的主题中像这样做时,Symfony似乎没有找到第一个
资源/模式集。我猜那是因为我提供了两次
资源
,但我不知道如何解决。你有没有试着把
娃娃巧克力
的定义放在
娃娃巧克力
之前?为什么
.yml.yml
?@Matteo是的,我试过了,它只会扭转问题,一个会给我找不到的路线,而另一个会工作。和.yml.yml是唯一的编辑错误。Sorry@FrankB我只是明白为什么我问的不可能。。。我不知道哪条路线是什么。。。感谢链接感谢@grssn的详细回复。没有匹配的路由,两个路由中只有一个正在工作,第二个get
路由未找到
。我不认为
/
是问题所在。事实上,当您在
app/config/routing.yml
中加载捆绑包的路由时,您将前缀设置为
/
,并且捆绑包路由文件中的索引也是
/
。以
/
结尾,如果在键入URL时没有添加,则只需添加它即可。此处的路线顺序已更改,因此更容易指出问题。Netherless,我尝试了你所说的,但没有解决我的问题,我仍然得到了其中一个的
未找到路径
。我将修改我的答案,因为现在,我看,可能不清楚我实际上是在说路径而不是前缀值,当我提到这一点时,我认为以“/”结束他们的价值观不是一个好的做法。但是我测试了它,事实上它看起来并不会导致您遇到的问题。可能问题在chocolate.yml文件中。你能更新你的答案以显示该文件的内容吗?测试时你使用什么URL访问该资源?这不是问题的答案。谢谢你的详细回复@grssn。没有匹配的路由,两个路由中只有一个正在工作,第二个get
路由未找到
。我不认为
/<