如何使用GET
参数转发?
我在同一个控制器中有两个动作。我在第一个动作中做了一些魔术,如果一切顺利,我希望它转发到另一个动作,但在第一个动作中创建了GET
个参数。
我现在拥有的是:
return $this->forward('AppBundle:default:tracked', array(), array(
'tracking_code' => $tracking_code,
'company' => $tp_company_name
)));
在那里清空数组,因为他们不顾一切地努力让它发挥作用。 Documentation告诉第二个数组是查询参数,但没有真正发生,所以我一定做错了。
第二个动作尝试获取如下参数:
/**
* @Route("/tracked", name="tracked")
*/
public function trackedAction()
{
$request = Request::createFromGlobals();
// If there is the required variables in the GET:
if($request->query->has('tracking_code') && $request->query->has('company'))
但不,变量似乎永远不会到达那里。
我有这种设置的原因是,用户也可以从其他地方进入trackedAction
。
答案 0 :(得分:3)
我认为在第二个动作中获取参数的正确方法是这样做:
return $this->forward('AppBundle:default:tracked', array(
'tracking_code' => $tracking_code,
'company' => $tp_company_name
)));
你的第二个动作是:
/**
* @Route("/tracked/{tracking_code}/{company}", name="tracked")
*/
public function trackedAction($tracking_code=null, $company=null)
{
...
}
我使用了$tracking_code = null
,因为你指定了这个可以从另一个地方访问,也许不提供这些参数。这样它对两者都有效。
希望这有帮助。
答案 1 :(得分:2)
Symfony控制器转发的工作方式是使用您传递的选项复制当前Request
,然后通过HttpKernel
组件重新分派它。你可以看到这个in the code。因为它是一个子请求,所以您的第二个操作是从全局(即Request
等)创建一个$_GET
,但没有更改。
解决方案是将您的第二个操作方法签名更改为:
public function trackedAction(Request $request)
这意味着$request
变量将对您的操作“本地”,并包含您想要的变量。
在实践中,您应该始终将Request
传递给您的操作,因为它会使您的控制器更加可测试并防止出现类似的奇怪问题。
除了上述所有内容之外,您可以使用redirect来代替HTTP重定向,而不仅仅是在Symfony请求系统中进行转发。