FosrestBundleとSymfony3でAPIを構築しています。私の仕事の一部では、フォームを作成する必要があります。フォームの一部のフィールドを「不要」に設定する必要があります。しかし、私はそれらを作成しようとするとエラーが発生します。FosrestBundleでフォームを構築するときにSymfony3で「不要」を使用する
私のエンティティの1つのフォームを作成したのは、「質問」です。
まず私はfalseに必要な設定QuestionTypeクラスを作成しました:
class QuestionType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('libelle');
$builder->add('description');
$builder->add('imageRoot');
$builder->add('page', 'integer', array('required' => false));
$builder->add('ligne', 'integer', array('required' => false));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Question',
'csrf_protection' => false
]);
}
}
は第二に、私は私のvalidation.ymlファイルで確認パラメータを設定した:
AppBundle\Entity\Question:
properties:
libelle:
- NotBlank: ~
- Type: string
description:
- NotBlank: ~
- Type: string
imageRoot:
- Type: string
page:
- Type: integer
- GreaterThan:
value: 0
- LessThanOrEqual:
value: 1000
ligne:
- Type: integer
- GreaterThan:
value: 0
- LessThanOrEqual:
value: 1000
は第三に、私は私が作成しましたコントローラ内のフォーム
class ContenuController extends Controller{
/**
* @Rest\View(serializerGroups={"contenu"}, statusCode=Response::HTTP_CREATED)
* @Rest\Post("/lectureContenu/{id}/Questions")
*/
public function postQuestionAction(Request $request)
{
$em = $this->getDoctrine()->getEntityManager();
$contenu = $em->getRepository('AppBundle:Contenu')->find($request->get('id'));
$typeQuestion = $em->getRepository('AppBundle:TypeQuestion')->find(1);
if (empty($contenu)) {
return new JsonResponse(['message' => 'Contenu de la question inexistant'], Response::HTTP_NOT_FOUND);
}
$question = new Question();
$question->setContenu($contenu)
->setTypeQuestion($typeQuestion);
$form = $this->createForm(QuestionType::class, $question);
$form->submit($request->request->all()); // Validation des données
if ($form->isValid()) {
$em->persist($question);
$em->flush();
return $question;
} else {
return $form;
}
}
}
最後に、コードを実行すると、ル(ポストマンを使用して)以下:
{
"libelle": "test",
"description": "test",
"imageRoot": "test"
}
私はこのエラーを得た:
...
"message": "Could not load type \"integer\"",
"class": "Symfony\\Component\\Form\\Exception\\InvalidArgumentException",
...
私はなぜ知りません!私にとっては、すべてが正しいようです。助けてください !
なぜ'QuestionType'フォームの' buildForm'メソッドに 'return $ options;'を追加します??? –
これは間違いですが、私はそれを削除します:) – kabrice
'AppBundle \ Entity \ Question'エンティティの検証制約と関連コードを追加してください。 (いくつかのカスタム制約)。 –