如何在Symfony REST API中处理方括号字段数组

时间:2018-12-23 10:30:22

标签: php forms symfony

我正在使用Symfony 3设置REST API,但无法通过表单发送数组值,后者被视为未在控制器中提交。

用例是通过POST表单将关键字数组发送到/ media / keywords端点。然后,端点将能够获取每个关键字和相应的ac。这里没有教义实体。

我的动作如下:

/**
 * @Post(
 *    path = "/media/keywords",
 *    name = "app_media_keywords_update"
 * )
 * @View(StatusCode = 200)
 * @RequestParam(name="keywords")
 */
public function keywordsAction(Request $request)
{
    $form = $this->createFormBuilder()
        ->add('keywords', TextType::class)
        ->getForm();
    $form->handleRequest($request);

    echo "issub=".$form->isSubmitted()."<br>";
    echo "isValid=".$form->isValid()."<br>";

    die();
}

输出如下:

issub=
<br>isValid=
<br>

出于测试目的,我使用Postman模拟POST提交,如下所示:

Adding the keywords using POSTMAN

我不明白为什么表单被视为未提交。还需要其他东西吗?我对createFormBuilde()的调用是否正确(特别是关于类型,不是数组,只有TextType)?

1 个答案:

答案 0 :(得分:0)

通过keywords传递多个项目时,应使用CollectionType

$form = $this->createFormBuilder()
    ->add('keywords', CollectionType::class, [
        'entry_type' => TextType::class
    ])
    ->getForm();
$form->handleRequest($request);

echo "issub=".$form->isSubmitted()."<br>";
echo "isValid=".$form->isValid()."<br>";

// also get form submit errors, for example:
if (!$form->isValid()) {
    print_r($form->getErrors(true));
}

表格错误手册为here