2017-04-11 46 views
0

我有一個非常簡單的腳本。它從表中讀取ID和NAME,並將它們作爲選項添加到我的choiceType中。symfony 3 ChoiceType is not無效

已解決 查看上一個腳本。您必須再次在表單中添加所有選項。

這是行動。

/** 
* @Route("/monitor/setup/carousel", name="SetupCarousel") 
*/ 
public function SetupCarouselManageAction(Request $request){ 
    $repository = $this->getDoctrine()->getRepository("AppBundle:Picture"); 
    $pictures = $repository->findAll(); 
    $p = array(); 
    $p['-- Bitte Bild setzen'] = -1; 
    foreach($pictures as $pic){ 
     $p[$pic->getTitle()] = $pic->getId(); 
    } 
    $carousel = new Carousel(); 
    $FormCarousel = $this->createForm(CarouselType::class, $carousel, array(
      'pictures' => $p, 
      'action' => $this->generateUrl('SetupInputCarousel') 
    )); 

    $render = $this->render('SetupCarousel.html.twig',array(
      'form_event' => $FormCarousel->createView() 

    )); 
    return $render; 
} 

中的頁面類型:

class CarouselType extends AbstractType{ 
public function buildForm(FormBuilderInterface $builder, array $options){ 

    $builder 
     ->add("bildId", ChoiceType::class, 
       array('choices' => $options['pictures'])) 
     ->add('submit', SubmitType::class); 
} 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver 
    ->setDefaults(array(
      'data_class' => Carousel::class, 
      'pictures'=> array('array'))) 
    ->setAllowedTypes('pictures', array('array')) 
    ; 
} 
} 

到目前爲止,一切都很好。在我的頁面上獲得ChoiceType Box,我可以選擇我想要的條目並提交。如果我想檢查數據是否有效,則失敗。

這裏我實體

class Carousel{ 
/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** @ORM\Column(type="integer") */ 
protected $bildId; 

/**@ORM\Column(type="string") */ 
protected $text; 

這是我得到的數據回首的剎那的方式。

/** 
* @Route("/monitor/setup/input/carousel",name="SetupInputCarousel") 
*/ 
public function SetupInputCarouselAction(Request $request){ 
    $carousel = new Carousel(); 
    $form = $this->createForm(CarouselType::class,$carousel); 
    $form->handleRequest($request); 
    if($form->isSubmitted()){ 

     //pease rework this in future 
     $data = $request->request->get('carousel'); 
     $carousel->setBildId($data['bildId']); 

     $carousel->setText($data['text']); 

     if($carousel->getBildId() == -1){ 
      return $this->redirectToRoute('SetupHome'); 
     } 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($carousel); 
     $em->flush(); 
    return $this->redirectToRoute('SetupCarousel'); 

} 

有沒有人有任何想法,爲什麼這個下面的腳本不起作用?這是我可以在我的項目中的所有其他頁面上完成的方式。

public function SetupInputEventsAction(Request $request){ 

    //YOU HAVE TO ADD THE ORIGINAL OPTIONS, THIS SOLVE THE PROBLEM 
    $repository = $this->getDoctrine()->getRepository("AppBundle:Picture"); 
    $pictures = $repository->findAll(); 
    $p = array(); 
    $p['-- Bitte Bild setzen'] = -1; 
    foreach($pictures as $pic){ 
     /** @var pic Picture */ 
     $p[$pic->getTitle()] = $pic->getId(); 
    } 
    $carousel = new Carousel(); 
    $form = $this->createForm(CarouselType::class,$carousel, array(
      'pictures' => $p, 
      'action' => $this->generateUrl('SetupInputCarousel') 
      )); 

    /* 
    SEE WORKING ONE ABOVE 
    $event = new Carousel(); 
    $form = $this->createForm(CarouselType::class,$event);*/ 
    $form->handleRequest($request); 
    if($form->isSubmitted() && $form->isValid()){ 
     //handel type 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($event); 
     $em->flush(); 
    } 
    return $this->redirectToRoute('SetupEvents'); 
} 

友好的問候,

的Fabian Harmsen

+0

你呈現:'在樹枝模板'form_widget(form._token)? –

+0

@ĐuroMandinić這是我如何打印\t {{form_start(form_event)}} {{form_widget(form_event)}} {{form_end(form_event)}} –

+0

您是否收到任何驗證錯誤消息?你怎麼知道這個領域是無效的? –

回答

0

的Soluion很容易,你必須添加所有選項 「SetupInputEventsAction」 功能。

public function SetupInputEventsAction(Request $request){ 

//YOU HAVE TO ADD THE ORIGINAL OPTIONS, THIS SOLVE THE PROBLEM 
$repository = $this->getDoctrine()->getRepository("AppBundle:Picture"); 
$pictures = $repository->findAll(); 
$p = array(); 
$p['-- Bitte Bild setzen'] = -1; 
foreach($pictures as $pic){ 
    /** @var pic Picture */ 
    $p[$pic->getTitle()] = $pic->getId(); 
} 
$carousel = new Carousel(); 
$form = $this->createForm(CarouselType::class,$carousel, array(
     'pictures' => $p, 
     'action' => $this->generateUrl('SetupInputCarousel') 
     )); 

/* 
SEE WORKING ONE ABOVE 
$event = new Carousel(); 
$form = $this->createForm(CarouselType::class,$event);*/ 
$form->handleRequest($request); 
if($form->isSubmitted() && $form->isValid()){ 
    //handel type 
    $em = $this->getDoctrine()->getManager(); 
    $em->persist($event); 
    $em->flush(); 
} 
return $this->redirectToRoute('SetupEvents'); 
} 

友好的問候,

的Fabian Harmsen