2016-11-19 5 views
1

FosrestBundle 및 Symfony3를 사용하여 API를 구축하고 있습니다. 내 작업의 일부에서는 양식을 작성해야하며 양식의 일부 필드를 "필요하지 않음"으로 설정합니다. 하지만 제작을 시도 할 때 오류가 발생했습니다.FosrestBundle을 사용하여 양식을 작성할 때 Symfony3에서 "필요하지 않음"을 사용합니다.

내 엔티티 중 하나에 대한 양식을 만든 방법은 다음과 같습니다. "질문".

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 파일 유효성 검사 매개 변수를 설정 :

은 첫째로 나는이 false로 필요한 설정 QuestionType 클래스 생성 셋째

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; 
    } 

    } 
} 

마지막으로, 코드를 실행할 때 제작 : 아래 (우편 배달부 사용) :

... 
"message": "Could not load type \"integer\"", 
"class": "Symfony\\Component\\Form\\Exception\\InvalidArgumentException", 
... 

나는 이유를 알고하지 않습니다

{ 
    "libelle": "test", 
    "description": "test", 
    "imageRoot": "test" 
} 

나는이 오류가있어! 나를 위해, 모든게 맞는 것 같습니다. 도와주세요 !

+0

왜 'Question $ form'의'buildForm' 메쏘드에'return $ options;'를 추가하십시오 ??? –

+0

실수입니다, 그냥 제거하십시오 :) – kabrice

+0

'AppBundle \ Entity \ Question' 엔티티 및 관련 코드의 유효성 검증 제약 조건을 추가하십시오. (몇 가지 맞춤 제약 조건). –

답변

1

답글을 달지 않은 질문에서이 질문을 삭제할 답변으로 의견을 말했습니다.

유형 이름은 당신이 당신의 폼 타입으로 아이를 추가하면 심포니 2.8을 더 이상 사용되지 않으며

심포니 3에을 제거하고, 당신은 유형의 완전한 이름 (FQN)을 사용해야합니다. 당신이 (당신의 정수 유형 exemple)를 2 가지 방법으로 그것을 할 수

$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

관련 문제