无法覆盖Symfony 4上POST请求中可选参数的默认值



我从Symfony 4.3开始,我正在努力寻找如何在POST请求中使用可选参数。

在文档中,它说我应该使用defaults来指定我的请求的可选参数。但是,Symfony似乎忽略了我的POST参数并一直获取默认值。

class NewController extends AbstractController
{
/**
* @Route(
*     "/app/new",
*     name="app_new",
*     methods={"POST"},
*     defaults={"app_type":"teste", "name":"defaultVal", "phone":"", "url":""}
*     )
*
* Creates new application authorization flow
*/
public function indexAction($app_type, $name, $phone, $url)
{
//        $appType = $this->getParameter('app_type');
return new Response('Hello ' . $name . PHP_EOL);
}
}

当通过 POST 发送的任何参数被忽略时:

$ curl -X POST http://127.0.0.1:8000/app/new -d "name=John&app_type=45533" 

返回

你好默认瓦尔

我在这里做错了什么吗?

您似乎混淆了不同的参数类型。

"路由"参数与"请求"参数不同。

使用@Route注记定义的路径参数恰如其分。基本上,您可以在应用程序中将不同的路径段用作参数。

通常,如下所示:

/blogpost/{id}

id可以作为$id注入应用程序控制器的位置。

在您的情况下,您正在为路径段定义默认值,甚至没有在路由定义中定义...因此,除了默认值之外,无法为这些值获取任何值。

您可以像这样重写控制器操作:

/**
* @Route(
*     "/app/new",
*     name="app_new",
*     methods={"POST"})
*/
public function indexAction(SymfonyComponentHttpFoundationRequest $request)
{
$appType = $request->get('app_type', 'yourDefaultValue');
$name    = $request->get('name', 'anotherDefaultValue');
$phone   = $request->get('phone');
$url     = $request->get('url');
return new Response('Hello ' . $name . PHP_EOL);
}

最新更新