【问题标题】:How to pass normal parameters in URL in Symfony?如何在 Symfony 的 URL 中传递正常参数?
【发布时间】:2011-06-10 02:48:21
【问题描述】:

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

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

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

编辑:这是我根据汤姆的要求使用的代码:

/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-&gt;getRoute() 不包含有关fooabc 的信息,当我使用URL“/user/login?foo=bar&abc=123”在查询字符串中传递它们时。

【问题讨论】:

  • Matt... 又添加了一项更新。

标签: routing symfony1 query-string symfony-1.4


【解决方案1】:

访问变量时,使用$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();

【讨论】:

  • 但是我正在尝试使用 sfDoctrineRoute 中的参数,当我在查询字符串中使用它们时它不接受我的参数。
  • 您的路由规则是否在 routing.yml 中有它们?网址:/user/login/:foo/:abc ....?
  • 不,我不希望它们成为目录结构的一部分,我希望能够在 URL 栏中输入:/user/login?foo=bar&abc=123
  • 我明白了...然后将它们排除在路由规则之外,只输入你应该工作的东西,包括输入它。我唯一能想到的另一件事是你使用一些非标准方式将它们附加到路径中。我记得遇到过几个案例。您能否粘贴一个示例,说明如何将它们附加到您的代码中?
  • 或者我应该澄清一下:在 URL 栏中键入它们应该无需任何调整即可工作,并且应该使参数可用于您请求的操作。您还想用参数做其他事情吗?
【解决方案2】:

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

routing:
  class: sfPatternRouting
  param:
    extra_parameters_as_query_string: true

【讨论】:

    【解决方案3】:

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

    default:
      url:   /:module/:action
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-05
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多