如何在Symfony中传递URL中的常规参数?

时间:2011-01-16 20:16:33

标签: routing symfony1 query-string symfony-1.4

我正在尝试通过普通的查询字符串传递参数,如下所示:

/user/login?foo=bar&abc=123

不幸的是,sfRoute实例中的任何数据似乎都没有包含参数fooabc的数据。我该如何解决这个问题?

编辑:根据Tom的要求,以下是我正在使用的代码:

/apps/api/config/routing.yml:

login:
  url:   /user/login
  param: { module: user, action: login }

/apps/api/modules/user/actions/actions.class.php:

class userActions extends sfActions {
    public function executeLogin(sfWebRequest $request) {
        echo '<pre>'.print_r($this->getRoute(), true).'</pre>';
    }
}

就是这样。输出显示$this->getRoute()在我的查询字符串中使用URL“/ user / login?foo = bar&amp; abc = 123”传递fooabc时不包含任何信息。

3 个答案:

答案 0 :(得分:2)

访问变量时,请使用$ request对象,而不是sfRoute:

$request->getParameter('foo')

确保接收这些请求参数的操作中的函数将其声明为传入变量:

public function executeSomeAction($request)  {  }

如果您在Symfony中寻找相当于$_SERVER['QUERY_STRING']的内容,我还没有找到它,我会对此感兴趣。

<强>更新

我认为您使用的方法只会打印路线。我认为你需要做的就是通过$ request对象访问它们,正如我前面提到的。例如:

$params_typed = $request->getParameterHolder();  // ... and grab them from here

...或使用服务器查询字符串或单独处理传入的参数。

抱歉,我无法提供更多帮助。

第二次更新:

实际上,只是测试了一个小小的想法:

如果你在routing.yml中定义了这样的参数:

login:
  url:   /user/login
  param: { module: user, action: login, foo: something, abc: something }

您可以通过以下方式访问它们:

$full_path = sfContext::getInstance()->getRouting()->getCurrentInternalUri();

答案 1 :(得分:1)

你需要adjust this in factories.yml我认为:

routing:
  class: sfPatternRouting
  param:
    extra_parameters_as_query_string: true

答案 2 :(得分:1)

请注意,如果您想使用“extra_parameters_as_query_string:true”参数,则必须删除路线的最终星号:

default:
  url:   /:module/:action