Symfony2:表单与一对一关系的实体的集合

时间:2015-06-17 22:00:47

标签: php entity-framework symfony doctrine-orm symfony-forms

我有两个实体:

  1. TransactionDefaultParametersEntity

    • 参数:widgetType
    • 参数:defaultParameters(与DefaultParametersEntity具有一对一的关系)
  2. DefaultParametersEntity

    • 参数:checkIn
    • 参数:checkOut
    • 参数:currency
    • 参数:成人
  3. 控制器提供了TransactionDefaultParametersEntities的集合,对于每个我想要一个表单显示所有DefaultParameterEntity参数以及TransactionDefaultParametersEntity提供的widgetType参数。

    目前,每个实体都有一个表单类型:

    1. TransactionDefaultParametersFormType

      class DefaultSettingsFormType extends AbstractType
      {
      
      /**
       * @param  FormBuilderInterface $builder
       * @param  array                $options
       */
       public function buildForm(FormBuilderInterface $builder, array $options)
      {
          $builder
              ->add('defaultParameters', 'collection', ['type' => default_parameters', 'allow_add' => true]);
      }
      
      public function configureOptions(OptionsResolver $resolver)
         {
          $resolver->setDefaults(array(
              'data_class' =>    'AppBundle\Entity\TransactionDefaultParametersEntity',
              'create' => false
             ));
         }
      
         public function getName()
         {
          return 'transaction_default_parameters';
         }
      }
      
    2. DefaultParametersFormType

      class DefaultParametersFormType extends AbstractType
      {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
          $builder
              ->add('widgetType', 'choice', [
                  'choices' => [
                      'Default',
                      'Booking Engine',
                      'Informative'
                  ],
                  'label' => 'Widget Type'
              ])
              ->add('checkIn', 'text', ['label' => 'Check In'])
              ->add('checkOut', 'text', ['label' => 'Check Out'])
              ->add('currency', 'text', ['label' => 'Currency'])
              ->add('adults', 'text', ['label' => 'adults']);
        }
      
        public function configureOptions(OptionsResolver $resolver)
        {
          $resolver->setDefaults(array(
              'data_class' => 'AppBundle\Entity\DefaultParametersEntity',
          ));
        }
      
        public function getName()
        {
          return 'default_parameters';
        }
      }
      
    3. 最后在控制器中:

          // $transactionDefaultParametersCollection is a collection of TransactionDefaultParameterEntities
          $form = $this->createFormBuilder($transactionDefaultParametersCollection)
                          ->add('transactionDefaultParameters', 'transaction_default_settings')
                          ->add('save', 'submit', array('label' => 'Save'))
                          ->getForm();
      
          $form->handleRequest($request);
      
          if ($form->isValid()) {
              // do something
          }
      
          return $this->render(
              'settings/editDefaults.html.twig',
              [
                  'form' => $form->createView()
              ]
          );
      

      如果不清楚请告诉我:)。如果我可以指出一篇非常有用的文章。我查看了如何嵌入表单集合,但这与提供的示例不同。

0 个答案:

没有答案