因此,我即将创建一个具有三个相互依赖的下拉列表的表单。 选择一个或多个通道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?