Symfony:如何将参数从Route传递给Controller而没有路径

时间:2017-06-23 11:56:48

标签: php symfony symfony-3.3

我有路线

   detail:
      path:     /{code}
      defaults: { _controller: controller.main:detailAction }

我也有这条路线的控制器

 public function detailAction(Request $request, string $code, int $size, array $params): Response
 {
 }

我的问题是:如何向控制器说明他应该将哪些参数设为int $sizearray $params?我在symfony文档中发现,我可以在defaults部分特别提到params,其默认值为

   detail:
      path:     /{code}
      defaults: { _controller: controller.main:detailAction }
      size:        1
      params:      "Hello world!"

但这不是我想要的,因为我不应该为这个参数设置一个默认值,但它应该直接从请求中获取。如何在不使用/{code}/{size}之类的路线的情况下执行此操作? 即使在这种情况下,我如何处理数组呢?

2 个答案:

答案 0 :(得分:3)

您可以通过在控制器中传递参数来生成这样的网址:

 $url = $this->generateUrl("detail", array("code" => $code, ...));

    return $this->redirect($url);

路由:

  detail:
     path:     /
     defaults: { _controller: controller.main:detailAction }

答案 1 :(得分:0)

如果你想指定像这样的参数

someurl.io/action/?filter=allopenissues&orderby=created

您应该在操作中键入提示请求对象并访问其查询参数包。如果您的控制器扩展了Symfony控制器,请求将自动通过。

use Symfony\Component\HttpFoundation\Request;
....
public function updateAction(Request $request)
{
    $request->query->get('myParam'); // get myParam from query string 
}