2016-12-11 55 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

類似
相關問題