承接 loamok/subformsmadeeasy 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

loamok/subformsmadeeasy

最新稳定版本:1.2

Composer 安装命令:

composer require loamok/subformsmadeeasy

包简介

Bundle to allow you manipulate subforms in symfony 2 easilly

README 文档

README

Bundle for Symfony 2.

This Bundle allow you to manage multiple subforms with translations on the fields name the easy way.

Installation

Add it to your composer.json :

{
    "require": {
        ...,
        "loamok/subformsmadeeasy" : "dev-master"
    }
}

Update your AppKernel.php :

    public function registerBundles() {
        $bundles = array(
            ...,
            new Loamok\SubformsMadeEasyBundle\LoamokSubformsMadeEasyBundle(),
        );

Usage

This bundle require Jquery 1.11.1 or compatible.

This bundle is usable with assetic.

Make sure you're correctly configure assetic to run in your bundle :

app/config/config.yml :

# Assetic Configuration
assetic:
    bundles:
        ...
        - YourWonderfullBundle

Add Jquery to your layout.twig :

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

Add the ressource to your layout.twig :

    {% javascripts '@LoamokSubformsMadeEasyBundle/Resources/public/js/dynamicSubforms.js' %}
      <script type="text/javascript" src="{{ asset_url }}"></script>
    {% endjavascripts %}

Configure an Entity to use another entity in a multiple relation :

<?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;

Add subforms to the form associate :

<?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
                ))

Add the row in your 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>

In the same twig template but at the end of the file add the js configuration :

<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>

Samples:

Note: Samples with a relation beetween post, tags, notes)

Note: You can use translations for the labels by using "{{ 'a.trans.key' | trans }}" in place of the label

Note: The three following samples will do exactly the same result

Minimalistic config :

<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>

Short config :

<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>

Long config :

<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>

Adding two subforms to a form :

<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>

License

This bundle is under the GNU LESSER GENERAL PUBLIC LICENSE Version 3.

See the complete license in the bundle:

LICENSE

统计信息

  • 总下载量: 101
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 3
  • Forks: 1
  • 开发语言: JavaScript

其他信息

  • 授权协议: LGPL-3.0
  • 更新时间: 2014-11-11