Aktualisieren einer Entität/Datenbank-Datensatz mit Formular-generator in Symfony 2

Ich ausgewählt habe, ein Entität-Datensatz aus der Datenbank und übergibt es an meiner form. Die form lädt richtig, aber wenn ich auf "speichern" klicken fügt einen neuen Datensatz statt zu aktualisieren die bereits vorhandenen.

PlanController.php

public function editPlanAction($id, Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $plan = $em->getRepository('etrakOnlineOrderProcessingBundle:Plan')->find($id);

    if (!$plan && !$request->isMethod('POST')) {
        throw $this->createNotFoundException(
                'No plan found for id ' . $id
        );
    }

    $form = $this->createForm(new PlanType(), $plan);

    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            $editPlan = $form->getData();
            $em->flush();
        }
    }

    return $this->render('etrakCustomerServiceBundle:Plan:edit.html.twig', array('form' => $form->createView()));
}

routing.yml

    etrak_customer_service_plan_edit:
       pattern: /plan/edit/{id}
       defaults: { _controller: etrakCustomerServiceBundle:Plan:editPlan }

PlanType.php

       namespace etrak\CustomerServiceBundle\Form\Type;

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;

    class PlanType extends AbstractType
    {
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'etrak\OnlineOrderProcessingBundle\Entity\Plan',
                'cascade_validation' => true,
            ));
        }

        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $termsConditionsArray = array("NONE" => "No Contract", "1 Year Contract" => "1 Year Contract", "2 Year Contract" => "2 Year Contract");
            $billingFrequencyArray = array("1" => "Monthly", "6" => "6 Months", "12" => "Yearly");

            //Create the form
            $builder->add('name', 'text', array('label' => 'Plan Name: ', 'required' => false));
            $builder->add('description', 'text', array('label' => 'Plan Description: ', 'required' => false));
            $builder->add('termsConditions', 'choice', array('choices' => $termsConditionsArray, 'label' => 'Terms & Conditions', 'required' => false));
            $builder->add('amount', 'text', array('label' => 'Plan Price: ', 'required' => false));
            $builder->add('affinity', 'choice', array('choices' => array('0' => 'Yes', '1' => 'No'), 'label' => 'Affinity? ', 'expanded' => true, 'required' => false));
            $builder->add('deactivationFee', 'text', array('label' => "Deactivation Fee: ", 'required' => false));
            $builder->add('recurringInMonths', 'choice', array('choices' => $billingFrequencyArray, 'label' => 'Billing Frequency: ', 'required' => false));
            $builder->add('pricingTier', 'entity', array(
                'class' => 'etrakOnlineOrderProcessingBundle:pricingTier',
                'property' => 'name',
                'label' => "Select Pricing Tier: "
            ));
            $builder->add('activeStartDate', 'datetime', array('label' => "Effective Start Date: ", 'required' => false));
            $builder->add('activeEndDate', 'datetime', array('label' => "Effective End Date: ", 'required' => false));
        }

        public function getName()
        {
            return 'plan';
        }
    }

Jede Hilfe wäre sehr geschätzt werden!

InformationsquelleAutor Ronny | 2013-03-22
Schreibe einen Kommentar