HTML   发布时间:2022-04-15  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了symfony – 如何禁用表单选择类型中的特定项目?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表单与数据库中的实体的选择字段:
public function buildForm(FormBuilderInterface $builder,array $options)
{
    $builder->add('categories','document',array(
        'class' => 'Acme\DemoBundle\Document\Category','property' => 'name','multiple' => true,'expanded' => true,'empty_value' => false
    ));
}

此表单将生成复选框列表,并将显示为:

[ ] Category 1
[ ] Category 2
[ ] Category 3

我想通过此列表中的值禁用某些项目,但我不知道应该截取选择字段项目.

有人知道解决方案吗?

解决方法

只需用finishView和PRE_BIND事件侦听器处理它.
public function buildForm(FormBuilderInterface $builder,'empty_value' => false
    ));

    $builder->addEventListener(FormEvents::PRE_BIND,function (FormEvent $event) {
        if (!$ids = $this->getNonEmptyCategoryIds()) {
            return;
        }

        $data = $event->getData();

        if (!isset($data['categories'])) {
            $data['categories'] = $ids;
        } else {
            $data['categories'] = array_unique(array_merge($data['categories'],$ids));
        }

        $event->setData($data);
    });
}

...

public function finishView(FormView $view,FormInterface $form,array $options)
{
    if (!$ids = $this->getNonEmptyCategoryIds()) {
        return;
    }

    foreach ($view->children['categories']->children as $category) {
        if (in_array($category->vars['value'],$ids,truE)) {
            $category->vars['attr']['disabled'] = 'disabled';
            $category->vars['checked'] = true;
        }
    }
}

大佬总结

以上是大佬教程为你收集整理的symfony – 如何禁用表单选择类型中的特定项目?全部内容,希望文章能够帮你解决symfony – 如何禁用表单选择类型中的特定项目?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。