Dynamické formuláře

Jeden formulář, jedna akce pro vkládání i editaci

Klasický CRUD řeším často pomocí jediného formType. Pokud je tvůj formulář pro editaci a vkládání nové entity téměř shodný, není nic snadnějšího, nežli rozdílná pole vyřešit pomocí $options

// constructor action jak pro edit tak insert public function yourFooAction(Request $request, $id = null) { $em = $this->getDoctrine()->getManager(); if (!is_null($id) { $yourFooObject = $em->getRepository('...')->find($id); $edit = true; } else { $yourFooObject = new YourFooEntity(); $edit = false; } $form = $this->createForm(new yourFooType($em), $yourFooObject, ['edit' => $edit]); //... } // yourFooType.php //... /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name', 'text', ['label' => 'Jméno']) ->add('surname', 'text', ['label' => 'Příjmení']); if ($options['edit'] == true) { $builder->add('username', 'text', ['label' => 'Uživatelské jméno', 'mapped' => false, 'required' => true]); $builder->add('submit', new SubmitType(), ['label' => 'Uložit změny', 'icon' => 'fa-check']); } else { $builder->add('submit', new SubmitType(), ['label' => 'Vložit', 'icon' => 'fa-check']); } } /** * @param OptionsResolver $resolver */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => YourFooEntityClass::class, 'edit' => false )); }

Symfony září 2018