【问题标题】:How to set select option disabled in formtype disabled dynamically?如何在动态禁用的表单类型中设置禁用选择选项?
【发布时间】:2014-10-21 18:03:32
【问题描述】:

我在 symfony2.5 中有一个表单类型,它的选择类型有很多动态设置为的选项

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('service_id', 'choice', array(
        'label' => 'Service',
        'choices' => $this->getChoice()
    ));
    .......
    .......
}

protected function getChoice()
{
    $choices = array();

    $options = array(
        '1' => 'test1',
        .............
    );

    foreach($options as $key => $option)
    {
        if($key%2 == 0) {
            ....
        } else {
            ////disabled choice
        }
    }
}

如何设置此选项集禁用?

【问题讨论】:

    标签: symfony


    【解决方案1】:

    这可以使用表单事件监听器和finishView 方法来完成。之前已经回答了类似的问题 - How to disable specific item in form choice type?

    请注意,PRE_BIND 事件已被弃用。请改用PRE_SUBMIT

    引用:

    事件 PRE_SUBMIT、SUBMIT 和 POST_SUBMIT 是在 Symfony 2.3。之前,它们被命名为 PRE_BIND、BIND 和 POST_BIND。

    http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

    【讨论】:

    • 当我使用 PRE_SET_DATA 时出现以下错误。检测到一个循环。 PRE_SET_DATA 事件的侦听器不得调用 setData()
    • 我修正了我的答案。它实际上是您需要使用的PRE_SUBMIT 事件。很抱歉造成混乱。
    • 仍然不工作:(。你能帮我在finishView的选项中添加禁用属性吗??
    • 作为你提供的链接 $view->children['service_id']->children 返回一个空数组
    • 没有看到你的代码,我真的帮不了你。这是解决它的另一种方法 - stackoverflow.com/questions/18299634
    猜你喜欢
    • 2014-09-10
    • 2012-12-29
    • 2013-03-14
    • 1970-01-01
    • 2018-04-10
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多