2014-03-24 54 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文件中设置的要求不适用于查询参数。您必须亲自处理验证。 –