acseo / dynamic-form-bundle
此包最新版本(v4.0.4)没有提供许可证信息。
Symfony From生成器从数组描述
v4.0.4
2023-10-16 09:52 UTC
Requires
- symfony/config: ^5.0
- symfony/dependency-injection: ^5.0
- symfony/event-dispatcher: ^5.0
- symfony/form: ^5.0
- symfony/http-kernel: ^5.0
- symfony/options-resolver: ^5.0
- symfony/validator: ^5.0
README
安装
- 使用composer下载ACSEODynamicFormBundle
- 启用Bundle
- 控制器示例
- 创建自己的提供者
步骤 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>