문제

REST API ANG ANGURJS를 기반으로 앱을 작성하려고합니다.나는이 자습서를 따르고 있습니다 http://npmasters.com/2012/11/25/symfony2.-rest-fosrestbundle.html 그러나 새 엔티티를 만들기 위해 게시 할 때 세부 정보 (감가 상각 방법)를 변경해야합니다. '이 양식에 추가 필드'오류가 없어야합니다.

class MainController extends Controller
{
    public function indexAction(Request $request)
    {
        $form = $this->createForm(new TaskType(),null,array('action' => $this->generateUrl('post_tasks').'.json'))
                ->add('submit','submit');


        $note_form = $this->createForm(new NoteType())
                ->add('submit','submit');

        return $this->render('MyBundle:Main:index.html.twig',
                array(
                    'form'=>$form->createView(),
                    'note_form'=>$note_form->createView(),
                )
        );
    }
}
.

내 TaskType 양식 :

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder

            ->add('timeStart','datetime',array(
                'date_widget' => 'single_text',
                'time_widget' => 'single_text',
                'date_format' => 'yyyy-MM-dd',
                'data' => new \DateTime('now')
            ))

            ->add('timeStop','datetime',array(
                'date_widget' => 'single_text',
                'time_widget' => 'single_text',
                'date_format' => 'yyyy-MM-dd',
                'data' => new \DateTime('now')
            ))

            ->add('project')  
            ->add('descriptionTask')
            ->add('isCompleted',null,array('required' => false))  
            ->add('isVisible',null,array('required' => false))
        ;
    }
.

지금 당장 나는 한 가지 형식 만 렌더링하지만 :

{%extends 'MyBundle::layout.html.twig' %}

{%block content %}

<div ng-view></div>

{{ form(form) }}

{% endblock %}
.

이는 주어진 엔티티를 플러시하는 것으로 예상되는 휴게 컨트롤러입니다.

public function cpostAction(Request $request)
{
 $entity = new Task();
 $form = $this->createForm(new TaskType(), $entity);
 $form->handleRequest($request);

 if ($form->isValid()) {

     $em = $this->getDoctrine()->getManager();
     $em->persist($entity);
     $em->flush();

     return $this->redirectView(
             $this->generateUrl(
                 'get_organisation',
                 array('id' => $entity->getId())
                 ),
             Codes::HTTP_CREATED
             );
 }

 return array(
     'form' => $form,
 );
}
.

이상한 일 : REST 컨트롤러와 동일한 코드를 MainController에 넣으면 양식이 유효성이 검사되고 새 엔티티가 플러시되고 있지만 어떻게 든 REST 컨트롤러가 오류가 발생합니다 ...

도움이 되었습니까?

해결책

폼을 생성 할 때 제출 단추를 추가하지만 유효성을 검사 할 때는 그렇지 않습니다.시도해보십시오 :

public function cpostAction(Request $request)
{
    $entity = new Task();
    $form = $this->createForm(new TaskType(), $entity)->add('submit','submit');
    ...
.

Sympunony가 기술적으로 필드입니다. 심볼지먼니가 기본적으로 Entity 속성에 매핑되지 않더라도 필드입니다.따라서 제출 단추가있는 양식을 생성 한 다음 유효성 검사 컨트롤러에서 생성하는 양식을 제출하여 제출 버튼이 필요합니다.

다른 팁

유효성 검사기가 추가 필드를 무시하도록하려면 'allow_extra_fields' => true를 FormBuilder에 대한 옵션으로 전달해야합니다.

필드 유효성 검사를 사용하지 않으려면

를 추가해야합니다.
public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'csrf_protection' => false,
        'validation_groups' => false,
    ));
}
.

및 buildform 방법 :

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->addEventListener(FormEvents::POST_SUBMIT, function ($event) {
            $event->stopPropagation();
        }, 900);
        $builder->add('field1','text')
                ->add('field2','text')
                .
                .
                .
    } 
.

자세한 내용은 http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-dynamic-form-modification-suppressing-form-validation

단일 SubmitType 버튼을 추가하거나 유사한 경우, 솔루션 Chausser가 표시된

$entity = new Task();
$form = $this->createForm(new TaskType(), $entity)->add('submit','SubmitType::class');
.

그러나 CollectionType을 사용하고 하위 양식 세트를 포함하는 경우 해당 유형의 매개 변수에 'allow_add'=> true를 포함시켜야합니다.예를 들어, EntityType 양식 작성기에서 :

$builder->add('subEntities', CollectionType::class, array(
                'entry_type' => SubEntityType::class,
                'entry_options' => array('label' => false),
                'allow_add' => true,
            ))
.

여러 레벨이있는 경우 모든 수준의 임베딩을 위해 해당 내용을 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top