2014-03-24 52 views
0

是否有可能通過查詢字符串參數將請求路由到控制器/操作? 以及如何使用routing.yml文件來做到這一點?Symfony 1.4 - 通過查詢字符串參數路由

我的意思是:

/some/path?do=action1... 


some_route: 
    url: /some/path 
    param: { module: module1, action: action1 } 
    requirements: 
     do: action1  <--- ??? 


/some/path?do=action2 

some_route2 
    url: /some/path 
    param: { module: module1, action: action2 } 
    requirements: 
     do: action2  <--- ??? 

或一些常見的途徑:

some_route: 
    url: /some/path?do=:action 
    param: { module: module1, action: action } 
    requirements: 
     do: action\d+  

謝謝!

+0

您想爲不同的路線不同的動作,不是嗎?不明白你的問題。 –

+0

是的,針對不同'do'值的不同動作... – Savash

回答

1

是的,這可以通過在routing.yml創建通用規則,這樣做:

generic_rule: 
    url: /some/path/:action 
    param: {module: yourmodule} 

在當你調用這種情況下/some/path/index那麼yourmoduleindexAction方法將被調用。

你甚至可以創造更多的通用規則,其中兩個actionmodule是變量:

more_generic_rule: 
    url: /some/path/:module/:action 

檢查doc獲取更多信息。

0

您可以執行一個操作,該操作將檢查do參數並將您轉到正確的操作,例如,

main_action: 
    url: /some/path/:do 
    param: { module: yourmodule, action: mainAction } 
    requirements: 
     do: action\d+ 

然後在yourmodule/actions/actions.class.php

public function executeMainAction(sfWebRequest $request) 
{ 
    $do = $request->getParameter('do'); 

    if (doParameterIsOk($do)) { 
     $this->forward('yourmodule', $do); 
    } else { 
     // Handle bad `do` parameter. 
    } 
} 
+0

我在查詢字符串和要求中得到'do'參數:do:不起作用。如果它工作,它解決了我的問題:) 但它看起來像現實的解決方案,即使它迫使我處理行動中的路由。 – Savash

+0

在yml文件中設置的要求不適用於查詢參數。您必須親自處理驗證。 –