2016-11-23 40 views
2

我想減少重複代碼的數量,並在我的Drupal 8應用程序中提供規範URL。由於路由系統是基於Symfony構建的,因此我將它包含在標題中。是否可以僅使用參數構造Symfony路徑?

我在我的mymodule.routing.yml文件中構建路徑下的路徑。我想在第一個參數中匹配指定數量的不同字符串,並且可以在第二個參數中使用任何字符串。它看起來像這樣:

entity.my_entity.canonical: 
    path: '/{type}/{slug}' 
    defaults: 
    _controller: '\namespace\PostController::show' 
    requirements: 
    _permission: 'perm' 
    type: different|strings|that|can|match| 

現在,當我嘗試使用例如/match/some-slug訪問那麼它只是說「找不到網頁」。 如果我對路徑是靜態的,例如path: '/j/{type}/{slug}',那麼當我在瀏覽器中打開/j/match/some-slug時,它會按預期工作。

我的老闆不喜歡URL中的任何不必要的字符,所以我想通過使用兩個參數來實現這一點,如第一個示例中所示。

+0

確保沒有可能有與之相沖突的,因爲它可能完全另一條路徑。 – yceruto

+0

我怎麼知道?如果另一條路徑也有兩個參數,或者只有參數具有相同的名稱,纔會將其視爲衝突嗎? – littlethoughts

+2

使用'php bin/console debug:router'來調試您定義的路線,並且檢查訂單 – yceruto

回答

1

正如Yonel在評論中提到的,您可以使用debug:router來檢查您的所有路由。我沒有看到你的代碼有什麼問題。

嘗試運行bin/console router:match "/match/blaaa",如果你看到一些不是你想要的控制器,那麼你需要改變路線。因爲你得到一個404

它不應該是這樣,雖然這是我的作品

的routing.yml精確設置:

entity.my_entity.canonical: 
    path: '/{type}/{slug}' 
    defaults: 
    _controller: 'MyBundle:Something:foo' 
    requirements: 
    type: different|strings|that|can|match| 

內MyBundle \ SomethingController:

public function fooAction($id) 
{ 
    return new Response("bar"); 
} 

然後去http://localhost/match/fom顯示「酒吧」的迴應。

+1

感謝您的幫助,現在我發現它在Drupal 8中是不可能的。對於其他Drupal人員:命令獲取路由列表(使用Drupal Console)是'drupal router:debug' – littlethoughts

相關問題