acseo/dynamic-form-bundle

此包最新版本(v4.0.4)没有提供许可证信息。

Symfony From生成器从数组描述

安装数: 5,918

依赖者: 0

建议者: 0

安全性: 0

星标: 5

关注者: 14

分支: 2

公开问题: 0

类型:symfony-bundle

v4.0.4 2023-10-16 09:52 UTC

This package is auto-updated.

Last update: 2024-09-16 11:42:45 UTC


README

安装

  1. 使用composer下载ACSEODynamicFormBundle
  2. 启用Bundle
  3. 控制器示例
  4. 创建自己的提供者

步骤 1:使用composer下载ACSEODynamicFormBundle

在composer.json中添加ACSEODynamicFormBundle

{   
    "require": {
        "acseo/dynamic-form-bundle": "dev-master"
    }
}

现在运行以下命令,让composer下载bundle:

$ composer update acseo/dynamic-form-bundle

Composer将bundle安装到项目的vendor/acseo目录。

步骤 2:启用bundle

在kernel中启用bundle

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new ACSEO\Bundle\DynamicFormBundle\ACSEODynamicFormBundle(),
    );
}

步骤 3:控制器示例

public function indexAction()
{
    $formArray = array(
        'name' => array(
            'type' => 'text',
            'options' => array(
                'label' => 'Nom',
                'help' => 'Renseignez votre nom',
                'picto' => 'text',
            ),
            'constraints' => array(
                'NotBlank' => true,
                'Length' => array('min' => 2),
            )
        ),
        'amount' => array(
            'type' => 'money',
            'options' => array(
                'label' => 'Montant TTC',
                'help' => 'Montant total de votre achat',
                'picto' => 'money',
            ),
            'constraints' => array(
                'NotBlank' => true
            )
        ),
        'buydate' => array(
            'type' => 'date',
            'options' => array(
                'label' => "Date d'achat",
                'picto' => 'date',
            ),
            'constraints' => array(
                'NotBlank' => true
            )
        ),
        'product' => array(
            'type' => 'text',
            'options' => array(
                'label' => 'Libellé produit',
                'picto' => 'text',
                'help' => 'lorem ipsum',
                'data' => array(
                    array('value' => 'Foo'),
                    array('value' => 'Bar')
                )
            ),
            'constraints' => array(
                'NotBlank' => true
            ),
            'multiple' => true
        ),
    );

    $arrayFormProvider = $this->get('acseo.form.array.provider');
    $arrayFormProvider->setFormArray($formArray);

    $form =  $this->get('acseo.form.manager')->createForm($arrayFormProvider);

    if ($this->container->get('request')->isMethod('POST')) {
        $form->handleRequest($this->container->get('request'));

        if ($form->isValid()) {


            $data = $form->getData();
            // do anything you want ...
        }
    }


    return array('form' => $form->createView());
}

步骤 4:创建自己的提供者

您可以创建自己的服务表单提供者,该提供者实现了FormProviderInterface。

步骤 5:项目中的JS实现示例

<script>

        function initializeEvents() {
            $(".tipped").tipper();
        }

        $(document).ready(function() {
            initializeEvents();
        });

        var collectionHolder = $('.prototype');

        var $addTagLink = $('<a href="#" class="add_tag_link">Ajouter</a>');
        var $newLinkLi = $('<div class="childfieldwrap"></div>').append($addTagLink);

        $(function() {

            //collectionHolder.append($newLinkLi);

            $addTagLink.on('click', function(e) {
                e.preventDefault();
                addTagForm(collectionHolder, false);
            });

            collectionHolder.find('div.fieldwrap .fieldwrap').each(function(index) {
                console.log(index);
                if(index) {
                    addTagFormDeleteLink($(this));
                }
            });


            if (!$('.prototype').children().length) {
                addTagForm(collectionHolder, true);
            }


            $('input:first', collectionHolder).after($addTagLink);
        });

        function addTagForm(collectionHolder, isFirst) {
            var prototype = collectionHolder.attr('data-prototype');

            var newForm = prototype.replace(/__name__/g, collectionHolder.children().length);

            var $newFormLi = $('<div class="childfieldwrap"></div>').append(newForm);

            collectionHolder.append($newFormLi);
            if(!isFirst)
                addTagFormDeleteLink($newFormLi);

            initializeEvents();
        }

        function addTagFormDeleteLink($tagFormLi) {
            var $removeFormA = $('<a href="#" class="delete">Supprimer</a>');
            $('input', $tagFormLi).after($removeFormA);

            $removeFormA.on('click', function(e) {
                e.preventDefault();
                $tagFormLi.remove();
            });
        }

    </script>