Symfony2 Sonata管理员根据所选值动态更改输入数据 - php

对于我的对象之一,我需要创建一些动态的表单呈现...但是我无法弄清楚如何在Sonata Admin中执行此操作。例如,当我创建一个对象时,我具有一个字段类型。在此字段中,选择我的对象将要使用的类型。现在,当我选择类型时,我想根据该类型显示一个字段。例如,如果我选择类型“ Carousel”,我想显示一个选择所有对象形式的实体库的字段。如果我选择类型“产品”,我想显示所有要选择的产品的字段...我该如何实现?

现在我有这个:

/**
 * @param FormMapper $formMapper
 */
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->with('Module', array(
            'class' => 'col-md-6'
        ))
            ->add('position')
            ->add('type', null, array(
                'attr' => array('class' => 'module_type')
            ))
            ->add('items', 'entity', array(
                'class' => 'ApplicationSonataMediaBundle:Gallery'
            ))
        ->end()
    ;
}

而且我已经覆盖了编辑模板:

{% extends 'SonataAdminBundle:CRUD:edit.html.twig' %}

{% block javascripts %}
    {{ parent() }}
    <script type="text/javascript">
        $(document).ready(function () {
            $(".module_type").change(function() {

            });

        });
    </script>

{% endblock %}

如您所见,图库现在已被硬编码。

我现在不知道该怎么做...怎么说,如果选择的值是这个,请在​​字段中使用该实体...问题是在Sonata中渲染表单的方式非常复杂...我不知道明白它..

也许我应该使用ajax?但是同样,当我发送一个值并获得响应时,如何在不刷新的情况下添加字段?

任何帮助表示赞赏。

参考方案

Sonata为您提供了“ sonata_type_choice_field_mask”类型,该类型使您可以根据此“ sonata_type_choice_field_mask”输入的值来动态更改表单上显示的字段,因此您不必使用ajax。

Here is the doc在这里您可以找到有关奏鸣曲类型和选择字段掩码的所有信息。

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('type', 'sonata_type_choice_field_mask', array(
            'choices' => array(
                //The list of available 'Type' here
                'choice1',
                'choice2'
            ),
            'map' => array(
                //What you want to display depending of the selected option
                'choice1' => array(
                    // List of the fields displayed if choice 1 is selected
                    'field1', 'field3'
                ),
                'choice2' => array(
                    // List of the fields displayed if choice 2 is selected
                    'field2', 'field3'
                )
            ),
            'placeholder' => 'Choose an option',
            'required' => true
        ))
        ->add('field1', 'entity', array(/* Options for entity1 goes here */))
        ->add('field2', 'entity', array(/* Options for entity2 goes here */))
        ->add('field3')
    ;
}

Symfony2:未绑定到表单对象的选择字段中的字符串值 - php

我的应用程序包含一个带有三个选择字段/下拉列表的表单。第一个链接到实体中的“关系”字段,并且工作正常。用户应该首先选择一个表链接。第二个和第三个都链接到同一实体中的字符串字段。通过jQuery,这些选择字段将根据用户在第一个下拉列表中做出的决定填充值。提交表单后,第二个和第三个字段有错误:它们包含无效的输入。当我检查表单对象时,它们的值没有绑定。他们的价值观…

PHP-Symfony2.4我可以在一个文件中有多个类吗? - php

我正在使用Vzaar的PHP Library将视频从我的网站上传到其服务器空间。现在要指出的是-在它们的库中,有一些PHP文件,其中存在多个类,并且同一文件中不存在具有相同文件名的类。即查看OAuth.php,该文件中没有名称为OAuth的类。我想到的问题是当我创建任何PHP类文件时,可以在一个文件中创建多个类,以后再在代码中使用该文件,或者在其他项目中也使…

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…