我正在尝试通过普通的查询字符串传递参数,如下所示:
/user/login?foo=bar&abc=123
不幸的是,sfRoute
实例中的任何数据似乎都没有包含参数foo
或abc
的数据。我该如何解决这个问题?
编辑:根据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”传递foo
或abc
时不包含任何信息。
答案 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