2016-12-11 21 views
1

[设置]重复的ressource具有不同的前缀

  • Symfony的3
  • DollEntity,可以是其自身的子如。
  • ChocolateEntity,是DollEntity
  • 的孩子

[问题]

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

我的问题是,我无法弄清楚如何有两个不同的路线来获得巧克力。

的src /的appbundle /资源/配置/ 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}/ 


我怎样才能得到这两条航线的工作?
有没有办法让单个资源有多个前缀?

+3

是的,你可以有多个路由到一个动作,只要你定义唯一标识符为每条路线。不要忘记导入从app/routing.yml开始的路由。重复:http://stackoverflow.com/questions/11127414/symfony2-is-it-possible-to-have-two-route-for-one-action-in-a-controller –

+0

@FrankB我确实发现这个话题之前张贴...但我的情况有点不同。我没有使用'partern/defaults',而是'resource/prefix'。 Symfony在链接主题中似乎没有找到第一个“resource/patern”设置。我想这是因为我提供了两次“资源”,但我不知道如何解决。 – Preciel

+0

你有没有试过把'sub_doll_chocolate'的定义放在'doll_chocolate'之前?为什么'.yml.yml'? – Matteo

回答

-1

我不太清楚,但我不认为用'/'结束你的路线是一个好习惯。另外symfony中的一般想法是它匹配它认为合适的第一条路线。所以你还应该检查一下其他路线是否在达到doll_chocolate之前没有得到匹配(这就是在每个右边结尾处使用'/'符号成为问题的原因)。我还建议你在前面放一些不太具体的URL(这样doll_chocolate会在doll_new之后进行,这两条路线都放在doll_index路径之后)。你还应该检查你输入到浏览器的URL是否真的以'/',因为它不会匹配路线

+0

感谢您的详细回复@grssn。没有路线匹配,只有一个正在工作,其次是'找不到路线'。我不认为'/'是问题。实际上,当你在'app/config/routing.yml'中加载你的bundle的路由时,你将前缀设置为'/',并且你的bundle路由文件中的索引也是'/'。如果您在输入URL时没有使用'/'结尾,只需添加它即可。此处的路线顺序发生了变化,因此更容易指出问题。无奈,我尝试了你所说的话,并没有解决我的问题,我仍然为其中的一个找到了'找不到路线'。 – Preciel

+0

我会修改我的答案,因为现在,我看着它,可能并不清楚我实际上是在谈论路径而不是前缀值,当我提到我不认为这是一个很好的做法来结束它们值为'/'。但是我测试了它,事实上它看起来并不会导致你遇到的问题。 – grssn

+0

也许问题出在chocolate.yml文件中。你能否更新你的答案以显示该文件的内容,以及在测试时你使用什么URL访问该资源? – grssn

0

使用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

类似
相关问题