区块链技术博客
www.b2bchain.cn

Symfony2 Sonata管理员根据所选值动态更改输入数据 – php程序员分享

本文介绍了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')     ; } 

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

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

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

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

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

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Symfony2 Sonata管理员根据所选值动态更改输入数据 – php程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们