具有不同前缀的重复资源

时间:2016-12-11 06:12:07

标签: symfony

[设置]

  • Symfony 3
  • DollEntity,可以是自己的孩子。
  • ChocolateEntity,是DollEntity的孩子

[问题]

我的DollEntity就像一个俄罗斯娃娃,因此,一个娃娃可以包含另一个娃娃。 ChocolateEntity将在第一个或第二个玩偶中。

我的问题是,我无法弄清楚如何使用两条不同的路线来获取巧克力。

src / AppBundle / Resources / config / doll.yml

doll_index:
    path:     /dolls/
    defaults: { _controller: "AppBundle:Doll:index" }
    methods:  GET

doll_show:
    path:     /doll/{idDoll}/show/
    defaults: { _controller: "AppBundle:Doll:show" }
    methods:  GET

doll_new:
    path:     /doll/new/
    defaults: { _controller: "AppBundle:Doll:new" }
    methods:  [GET, POST]

doll_edit:
    path:     /doll/{idDoll}/edit/
    defaults: { _controller: "AppBundle:Doll:edit" }
    methods:  [GET, POST]

doll_delete:
    path:     /doll/{idDoll}/delete/
    defaults: { _controller: "AppBundle:Doll:delete" }
    methods:  DELETE

sub_doll_index:
    path:     /doll/{idDoll}/subDolls/
    defaults: { _controller: "AppBundle:Doll:index" }
    methods:  GET

sub_doll_show:
    path:     /doll/{parent}/subDoll/{idDoll}/show/
    defaults: { _controller: "AppBundle:Doll:show" }
    methods:  GET

sub_doll_new:
    path:     /doll/{idDoll}/subDoll/new/
    defaults: { _controller: "AppBundle:Doll:new" }
    methods:  [GET, POST]

sub_doll_edit:
    path:     /doll/{parent}/subDoll/{idDoll}/edit/
    defaults: { _controller: "AppBundle:Doll:edit" }
    methods:  [GET, POST]

sub_doll_delete:
    path:     /doll/{parent}/subDoll/{idDoll}/delete/
    defaults: { _controller: "AppBundle:Doll:delete" }
    methods:  DELETE

#Problem start here
doll_chocolate:
    resource: "@AppBundle/Resources/config/chocolate.yml"
    prefix:   /doll/{idDoll}/

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

sub_doll_chocolate将有效,而doll_chocolate将返回未找到路线错误。

通过测试,我发现我无法做到这一点

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


我怎样才能使这两条路线起作用? 有没有办法为单个资源提供多个前缀?

2 个答案:

答案 0 :(得分:1)

使用Symfony 4.1,您将能够拥有路由ID前缀。 https://github.com/symfony/symfony/issues/19612

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

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

注意:您可能已经使用FOSRest

答案 1 :(得分:-1)

我不太确定,但我不认为用' /'结束你的路线。是一个很好的做法。 symfony中的一般想法是它匹配它找到合适的第一条路线。所以你还应该检查一下其他路线是否在它到达doll_chocolate之前没有匹配(这就是在每个右边的末尾使用' /'符号的原因结果是问题)。我还建议您在前面放置较少的特定URL(以便doll_chocolate在doll_new之后正确,并且这两条路径都放在doll_index路径之后)您还应该检查您在浏览器中输入的URL是否实际上以' /',因为它不匹配路线