Ich versuche, einen ausgewählten Wert in einem Entity-Feld festzulegen. In Übereinstimmung mit vielen Diskussionen, die ich zu diesem Thema gesehen habe, habe ich versucht, die data
Option zu setzen, aber dies standardmäßig alle Werte nicht wählen:Symfony2 - Setzen Sie einen ausgewählten Wert für das Entity-Feld
class EventType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('place', 'entity', array(
'class' => 'RoyalMovePhotoBundle:Place',
'property' => 'name',
'empty_value' => "Choisissez un club",
'mapped' => false,
'property_path' => false,
'data' => 2
))
->add('begin')
->add('end')
->add('title')
->add('description')
;
}
// ...
}
Mit der Suche nach mehr ich habe, dass einige gefunden Die Benutzer mussten die Formularzuordnung für die Entität deaktivieren. Das erscheint logisch, also habe ich versucht 'mapped' => false
zu den Optionen hinzuzufügen, ohne Erfolg ...
Wenn es helfen kann, hier ist mein Controller:
class EventController extends Controller
{
// ...
public function addAction()
{
$request = $this->getRequest();
$em = $this->getDoctrine()->getManager();
$event = new Event();
$form = $this->createForm(new EventType(), $event);
$formHandler = new EventHandler($form, $request, $em);
if($formHandler->process()) {
$this->get('session')->getFlashBag()->add('success', "L'évènement a bien été ajouté.");
return $this->redirect($this->generateUrl('photo_event_list'));
}
return $this->render('RoyalMovePhotoBundle:Event:add.html.twig', array(
'form' => $form->createView()
));
}
}
Und die EventHandler
Klasse:
class EventHandler extends AbstractHandler
{
public function process()
{
$form = $this->form;
$request = $this->request;
if($request->isMethod('POST')) {
$form->bind($request);
if($form->isValid()) {
$this->onSuccess($form->getData());
return true;
}
}
return false;
}
public function onSuccess($entity)
{
$em = $this->em;
$em->persist($entity);
$em->flush();
}
}
Ich stecke gerade ein bisschen fest, gibt es jemanden, der eine Idee hat?
Ich kann mich nicht wirklich erinnern, aber ich denke, ich habe das schon vorher versucht, ohne Erfolg. Nun, ich werde das als Antwort akzeptieren, da ich Ihre Lösung im Moment nicht ausprobieren kann (ich arbeite nicht mehr an diesem Projekt), es scheint der logischere Weg zu sein. – Nesk