Symfony:如何在没有路径的情况下将参数从 Route 传递到 Controller
Symfony: how to pass a parameter from Route to Controller with no path
我有路线
detail:
path: /{code}
defaults: { _controller: controller.main:detailAction }
这条路线我也有控制器
public function detailAction(Request $request, string $code, int $size, array $params): Response
{
}
我的问题是:我如何告诉控制器他应该将哪些参数作为 int $size
和 array $params
?我在 symfony 文档中发现我可能会在 defaults
部分特别提到参数,默认值如下
detail:
path: /{code}
defaults: { _controller: controller.main:detailAction }
size: 1
params: "Hello world!"
但这不是我想要的,因为我不应该为这个参数设置默认值,但它应该直接从请求中获取。如何在不使我的路线像 /{code}/{size}
的情况下执行此操作?
即使在这种情况下,我该如何处理数组?
您可以通过在控制器中传递参数来生成这样的 url:
$url = $this->generateUrl("detail", array("code" => $code, ...));
return $this->redirect($url);
和路由:
detail:
path: /
defaults: { _controller: controller.main:detailAction }
如果你想像这样指定参数
someurl.io/action/?filter=allopenissues&orderby=created
您应该在操作中键入提示请求对象并访问其查询参数包。如果你的控制器扩展了 Symfony 控制器,Request 将被自动传递。
use Symfony\Component\HttpFoundation\Request;
....
public function updateAction(Request $request)
{
$request->query->get('myParam'); // get myParam from query string
}
我有路线
detail:
path: /{code}
defaults: { _controller: controller.main:detailAction }
这条路线我也有控制器
public function detailAction(Request $request, string $code, int $size, array $params): Response
{
}
我的问题是:我如何告诉控制器他应该将哪些参数作为 int $size
和 array $params
?我在 symfony 文档中发现我可能会在 defaults
部分特别提到参数,默认值如下
detail:
path: /{code}
defaults: { _controller: controller.main:detailAction }
size: 1
params: "Hello world!"
但这不是我想要的,因为我不应该为这个参数设置默认值,但它应该直接从请求中获取。如何在不使我的路线像 /{code}/{size}
的情况下执行此操作?
即使在这种情况下,我该如何处理数组?
您可以通过在控制器中传递参数来生成这样的 url:
$url = $this->generateUrl("detail", array("code" => $code, ...));
return $this->redirect($url);
和路由:
detail:
path: /
defaults: { _controller: controller.main:detailAction }
如果你想像这样指定参数
someurl.io/action/?filter=allopenissues&orderby=created
您应该在操作中键入提示请求对象并访问其查询参数包。如果你的控制器扩展了 Symfony 控制器,Request 将被自动传递。
use Symfony\Component\HttpFoundation\Request;
....
public function updateAction(Request $request)
{
$request->query->get('myParam'); // get myParam from query string
}