Php Symfony:如何在没有路径的情况下将参数从路由传递到控制器
我有一条路线Php Symfony:如何在没有路径的情况下将参数从路由传递到控制器,php,symfony,symfony-3.3,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 { } 我的问题是:我如何告诉控制器他应该采用哪些参数作
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 }
通过在控制器中传递参数,可以生成如下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控制器,请求将自动传递
use Symfony\Component\HttpFoundation\Request;
....
public function updateAction(Request $request)
{
$request->query->get('myParam'); // get myParam from query string
}
如果要指定这样的参数
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
}
在symfony>=3.3中,您可以直接执行
返回$this->redirectToRoute('detail',array('code'=>$code…)代码>这是唯一的方法吗?我不能在我的路由中声明一些参数应该被清楚地传递(大小->$size等)?在symfony>=3.3中,您可以直接执行return$this->redirectToRoute('detail',array('code'=>$code…)代码>这是唯一的方法吗?我不能在我的路由中声明一些参数应该被清楚地传递(size->$size等)吗?你是说有时只有一个代码,有时是一个代码+大小,有时是一个代码+大小+参数吗?不,因为我的detailAction()
语句需要所有参数,所以它总是必须传递所有参数。但是只有$code
是路径的一部分,其他我只想传递的参数是可选的:detailAction(…,int$size=null,array$params=null)
。然后你可以测试它们是否已设置,但我不相信(?)Symfony的路由器会将这些视为必需的参数。比如:这个问题毫无意义。你是说有时只有一个代码,有时是一个代码+大小,有时是一个代码+大小+参数?不,因为我的detailAction()
语句需要所有参数,它始终必须是所有传递的参数。但是只有$code
是路径的一部分,其他我只想传递的参数是可选的:detailAction(…,int$size=null,array$params=null)
。然后你可以测试它们是否被设置了,但我不相信(?)Symfony的路由器会将这些视为必需的参数。