与3个实体相关的Symfony依赖下拉

时间:2017-08-18 14:22:20

标签: symfony dynamic dropdown

因此,我即将创建一个具有三个相互依赖的下拉列表的表单。 选择一个或多个通道1时,通道3的选项应根据为通道1选择的内容进行更改。依赖于此,最后一次下拉"代理商"应该改变它的选择。 我已经尝试了不同的解决方案,但到目前为止还没有一个解决方案。现在我一直坚持Symfony的文档所提供的解决方案,该文档提供了两个实体的代码,但即使有了这个,我的第二个下拉列表也没有任何值,所以它是#s不工作 这是我的表格类型:

class SelectionType extends AbstractType {

  protected $tokenStorage;
  // private $manager;
  public function __construct(TokenStorageInterface $tokenStorage)
  {
      $this->tokenStorage = $tokenStorage;


  }
  public function buildForm(FormBuilderInterface $builder, array $options)
    {

      //solution Symfony Documentation

    $channel1s = new Channel1();
      $currentuser = $this->tokenStorage->getToken()->getUser();
      $builder
      ->add('channel1s', EntityType::class, array(
        'class' => 'AppBundle:Channel1',
        'property' => 'name',
        'label' => 'label.channel1s',
        'empty_value' => 'label.select_channel1s',
        'mapped' => false,
        'expanded' => false,
        'translation_domain' => 'UploadProfile',
        'multiple' => true,
        'required' => false,

      ));
      $formModifier = function (FormInterface $form, Channel1 $channel1s = null) {
        $channel3s = null === $channel1s ? array() : $channel1s->getChannel3();
        $form->add('channel3s', EntityType::class, array(
          'class' => 'AppBundle:Channel3',
          'property' => 'name',
          'label' => 'label.channel3s',
          'empty_value' => 'label.select_channel3s',
          'mapped' => false,
          'expanded' => false,
          'translation_domain' => 'UploadProfile',
          'choices' => $channel3s,
          'multiple' => true,
          'choices_as_values' => true,
        ));
      };

      $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function (FormEvent $event) use ($formModifier) {
          $data = $event->getData();

          $formModifier($event->getForm(), $data->getChannel1s());
        }
      );
        $builder->get('channel1s')->addEventListener(
          FormEvents::POST_SUBMIT,
          function (FormEvent $event) use ($formModifier) {
            $channel1s = $event->getForm()->getData();
            $formModifier($event->getForm()->getparent(), $channel1s);
          }
        );
      }

  public function setDefaultOptions(OptionsResolverInterface $resolver)
  {
        $resolver->setDefaults(array(
            'data_class' => 'DocumentBundle\Entity\UploadProfile'
        ));
  }


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


}

我也尝试过该网页上的订阅者解决方案:http://showmethecode.es/php/symfony/symfony2-4-dependent-forms/但它也没有成功。 我认为我的问题就在那条线上:

$channel3s = null === $channel1s ? array() : $channel1s->getChannel3();

但这只是猜测.. 我还添加了ajax函数:

var $channel1s = $('#uploadprofile_channel1s');
$channel1s.change(function() {
  var $form = $(this).closest('form');
  var data = {};
  data[$channel1s.attr('name')] = $channel1s.val();
  // data[channel3s.attr('name')] = channel3s.val();
  $.ajax({
    url : $form.attr('action'),
    type: $form.attr('method'),
    data : data,
    success: function(html) {
      $('#uploadprofile_channel3s').replaceWith(
        $(html).find('#uploadprofile_channel3s')
      );
    }
  });
});

我的3个实体拥有ManytoMany或OneToMany关系,我应该拥有所有合适的getter和setter,但是如果有人需要它们进行varify,请告诉我,我会上传它们!

我现在已经坚持了很长一段时间,所以我会对任何帮助或建议感到高兴!

注意:还有第三个实体(代理商)需要添加,但由于即使第一个实体都没有工作,我决定只上传前两个..

增加: 或者也许有人可以解释我的那条线:

$channel3s = null === $channel1s ? array() : $channel1s->getChannel3s();
might be, that this is my problem?

0 个答案:

没有答案