duande1986
2015-08-18 03:17
浏览 63
已采纳

如何在Symfony 2中使用集合字段类型

I'have been trying to use thr vollevtion field type in my Symfony 2 form, but it doesn't work. I already asked the same question sometime ago, but I didn't get the answer I wanted. I reed the documentation again (http://symfony.com/doc/current/reference/forms/types/collection.html), but I still got the same probleme.

I already explane everything inside my other post, so here it is:

How to integrate multiple entity in form in Symfony 2

Please, someone help me!

图片转代码服务由CSDN问答提供 功能建议

我一直在尝试在我的Symfony 2表单中使用thr vollevtion字段类型,但它不起作用。 我前段时间已经问了同样的问题,但我没有得到我想要的答案。 我再次阅读文档( http://symfony.com/doc/ current / reference / forms / types / collection.html ),但我仍然遇到同样的问题。

我已经在我的其他帖子中解释了所有内容,所以这里是:

如何在Symfony 2中整合多个实体形式

请 ,有人帮助我!

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dqu94359 2015-08-18 07:22
    已采纳

    Hopefully this helps you out

    ParentType:

    ->add('funding', 'collection', array(
                    'type' => new FundingType(),
                    'allow_add' => true,
                    'by_reference' => false,
                    'allow_delete' => true))
    

    ChildType:

    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('type', 'text', array(   
                    'label' => 'Funding'));
    
        }
    
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Bundle\Entity\Funding',
                ));
        }
    

    Controller:

    $funding = new Funding();
    $project->getFunding()->add($funding);
    

    Twig

     <div class="funding" data-prototype="{{ form_widget(form.funding.vars.prototype)|e}}">
           {% for funding in form.funding %}
                  {{ form_row(funding.type) }}
           {% endfor %}
     </div>
    
    <script>
    // Funding
    
    // setup an "add a tag" link
    var $addFundingLink = $('<a href="#" class="add_funding_link">Add Funding type</a>');
    var $newLinkLi1 = $('<p></p>').append($addFundingLink);
    
    jQuery(document).ready(function() {
        // Get the ul that holds the collection of tags
       var $collectionHolder1 = $('div.funding');
    
        // add the "add a tag" anchor and li to the tags ul
        $collectionHolder1.append($newLinkLi1);
    
        // count the current form inputs we have (e.g. 2), use that as the new
        // index when inserting a new item (e.g. 2)
        $collectionHolder1.data('index1', $collectionHolder1.find(':input').length);
    
        $addFundingLink.on('click', function(e) {
            // prevent the link from creating a "#" on the URL
            e.preventDefault();
    
            // add a new tag form (see code block below)
            addFundingForm($collectionHolder1, $newLinkLi1);
        });
    
    
    });
    
    function addFundingForm($collectionHolder1, $newLinkLi1) {
        // Get the data-prototype explained earlier
        var prototype = $collectionHolder1.data('prototype');
    
        // get the new index
        var index1 = $collectionHolder1.data('index1');
    
        // Replace '$$name$$' in the prototype's HTML to
        // instead be a number based on how many items we have
        var newForm1 = prototype.replace(/__name__/g, index1);
    
        // increase the index with one for the next item
        $collectionHolder1.data('index1', index1 + 1);
    
        // Display the form in the page in an li, before the "Add a tag" link li
        var $newFormLi1 = $('<p></p>').append(newForm1);
    
        // also add a remove button, just for this example
        $newFormLi1.append('<a href="#" class="remove-funding">Delete</a>');
    
        $newLinkLi1.before($newFormLi1);
    
        // handle the removal, just for this example
        $('.remove-funding').click(function(e) {
            e.preventDefault();
    
            $(this).parent().remove();
    
            return false;
        });
    }
    
    </script>
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题