Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:如何在没有路径的情况下将参数从路由传递到控制器_Php_Symfony_Symfony 3.3 - Fatal编程技术网

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的路由器会将这些视为必需的参数。