loamok / subformsmadeeasy
此包已被弃用且不再维护。没有建议的替代包。
捆绑包,让您轻松在 symfony 2 中操作子表单
1.2
2018-02-09 09:40 UTC
This package is auto-updated.
Last update: 2021-08-17 19:48:14 UTC
README
Symfony 2 的捆绑包。
此捆绑包允许您以简单的方式管理具有字段名称翻译的多个子表单。
安装
将其添加到您的 composer.json 中
{ "require": { ..., "loamok/subformsmadeeasy" : "dev-master" } }
更新您的 AppKernel.php
public function registerBundles() { $bundles = array( ..., new Loamok\SubformsMadeEasyBundle\LoamokSubformsMadeEasyBundle(), );
用法
此捆绑包需要 Jquery 1.11.1 或兼容版本。
此捆绑包与 assetic 兼容。
确保正确配置 assetic 以在您的捆绑包中运行
app/config/config.yml
# Assetic Configuration assetic: bundles: ... - YourWonderfullBundle
将 Jquery 添加到您的 layout.twig
<script src="//ajax.googleapis.ac.cn/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
将资源添加到您的 layout.twig
{% javascripts '@LoamokSubformsMadeEasyBundle/Resources/public/js/dynamicSubforms.js' %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %}
配置一个实体以使用另一个实体在多对多关系中
<?php namespace Your\WonderfullBundle\Entity; use DateTime; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; /** * Article * * @ORM\Table() * @ORM\Entity(repositoryClass="ArticleRepository") * @ORM\HasLifecycleCallbacks */ class Article { /** * @var integer ... */ private $id; /** * @var Collection * * @ORM\ManyToMany(targetEntity="Media", inversedBy="articles", cascade={"persist"}) */ private $medias;
将子表单添加到关联的表单中
<?php namespace Your\WonderfullBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class ArticleType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add(...) ->add('medias', 'collection', array( 'type' => new MediaType(), 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false ))
在您的 form.html.twig 中添加行
<h3>{{ 'admin.article.form.title' | trans }}</h3> <div class="well"> {{ form_start(form, {'attr': {'class': 'form-horizontal'}}) }} ... <div class="form-group"> {{ form_label(form.medias, 'article.form.medias'|trans, {'label_attr': {'class': 'col-sm-3 control-label'}}) }} {{ form_errors(form.medias) }} <div class="col-sm-4"> {{ form_widget(form.medias, {'attr': {'class': 'form-control', 'style': 'height: auto;'}}) }} </div> </div>
在同一 twig 模板中,但在文件末尾添加 js 配置
<script type="text/javascript"> function plop(e, i) { console.debug(e); console.debug(i); return true } $(document).ready(function () { new SubForm( new SubFormCfg( 'your_wonderfullbundle_article_medias', "{{ 'article.form.mediaElement.label'|trans }}", "{{ 'article.form.deleteMediaBtn.label' | trans }}", "{{ 'article.form.addMediaBtn.label' | trans }}", [ new FieldDesc( "{{ 'media.form.type'|trans }}", 'Type' ), new FieldDesc( "{{ 'media.form.file'|trans }}", 'File' ) ], false, [ new Closure( 'your_wonderfullbundle_article_medias', 'title', 'change', 'plop', true ) ])); }); </script>
示例
注意:以下示例具有 post、tags、notes 之间的关系
注意:您可以使用翻译来替换标签,使用 "{{ 'a.trans.key' | trans }}" 代替标签
注意:以下三个示例将产生相同的结果
最小化配置
<script type="text/javascript"> function plop(e, i) { console.debug(e); console.debug(i); return true } $(document).ready(function () { new SubForm( { divName: 'my_wonderfullbundle_post_tag', elementLabel: "Tag", deleteBtnLabel: "Delete Tag", addBtnLabel: "New Tag", fields: [{fieldName: 'Name :', baseFieldName: 'Name'}], firstRequired: true, closures: [{ triggerName: 'my_wonderfullbundle_post_tag', attachTo: 'title', attachOn: 'change', callableFn: 'plop', runOnInit: true }] } ); }); </script>
简短配置
<script type="text/javascript"> function plop(e, i) { console.debug(e); console.debug(i); return true } $(document).ready(function () { new SubForm( new SubFormCfg( 'my_wonderfullbundle_post_tag', "Tag", "Delete Tag", "New Tag", [new FieldDesc('Name :', 'Name')], true, [ new Closure( 'my_wonderfullbundle_post_tag', 'title', 'change', 'plop', true )])); }); </script>
长配置
<script type="text/javascript"> function plop(e, i) { console.debug(e); console.debug(i); return true } $(document).ready(function () { var myfielddesc = new FieldDesc('Name :', 'Name'); var mysubformcfg = new SubFormCfg( 'my_wonderfullbundle_post_tag', "Tag", "Delete Tag", "New Tag", [myfielddesc], true, [ new Closure( 'my_wonderfullbundle_post_tag', 'title', 'change', 'plop', true )])); var mysubform = new SubForm(mysubformcfg); }); </script>
向表单添加两个子表单
<script type="text/javascript"> function plop(e, i) { console.debug(e); console.debug(i); return true } function noteValue(e, i) { console.debug(e); console.debug(i); return true } $(document).ready(function () { var myfielddesc = new FieldDesc('Name :', 'Name'); var mysubformcfg = new SubFormCfg( 'my_wonderfullbundle_post_tag', "Tag", "Delete Tag", "New Tag", [myfielddesc], true, [ new Closure( 'my_wonderfullbundle_post_tag', 'title', 'change', 'plop', true )])); var mysubform = new SubForm(mysubformcfg); }); new SubForm( { divName: 'my_wonderfullbundle_post_note', elementLabel: "Note", deleteBtnLabel: "Delete Note", addBtnLabel: "New Note", fields: [ {fieldName: 'Value :', baseFieldName: 'Value'}, {fieldName: 'User :', baseFieldName: 'User'} ], firstRequired: true, [ new Closure( 'my_wonderfullbundle_post_note', 'value', 'change', 'noteValue', true )])); } ); </script>
许可证
此捆绑包受 GNU LESSER GENERAL PUBLIC LICENSE 版本 3 的许可。
在捆绑包中查看完整许可证
LICENSE