2016-11-19 9 views
1

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", 
... 

私はなぜ知りません!私にとっては、すべてが正しいようです。助けてください !

+0

なぜ'QuestionType'フォームの' buildForm'メソッドに 'return $ options;'を追加します??? –

+0

これは間違いですが、私はそれを削除します:) – kabrice

+0

'AppBundle \ Entity \ Question'エンティティの検証制約と関連コードを追加してください。 (いくつかのカスタム制約)。 –

答えて

1

私は答えられていない人からこの質問を削除する答えとしてコメントを入れました。

タイプの名前、あなたのフォームタイプに子を追加すると、あなたがタイプの完全修飾名(FQN)を使用する必要が

はsymfony 2.8でを非推奨とはsymfony 3でを除去しました。 あなたが最初のオプションを使用する場合は、あなたのクラス定義でクラスをインポートすることを忘れないでください2つの方法(あなたの整数型とexemple)

$builder->add('page', IntegerType::class) 

または

$builder->add('page', 'Symfony\Component\Form\Extension\Core\Type\IntegerType'); 

でそれを行うことができます。

use Symfony\Component\Form\Extension\Core\Type\IntegerType; 

すべての種類の一覧はこちらです:https://symfony.com/doc/current/reference/forms/types.html

関連する問題