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
你呈現:'在樹枝模板'form_widget(form._token)? –
@ĐuroMandinić這是我如何打印\t {{form_start(form_event)}} {{form_widget(form_event)}} {{form_end(form_event)}} –
您是否收到任何驗證錯誤消息?你怎麼知道這個領域是無效的? –