如何覆盖第三方包形式 - Symfony

时间:2017-09-21 13:25:06

标签: forms symfony bundles

我试图覆盖Symfony中的表单。第三方捆绑包是private-message-bundle : firediy

这是第三方捆绑表格:

     $builder
        ->add('recipients', null, array(
            'label'              => 'form.recipients',
            'translation_domain' => 'FDPrivateMessageBundle',
        ))
        ->add('subject', null, array(
            'label'              => 'form.subject',
            'translation_domain' => 'FDPrivateMessageBundle',
        ))
        ->add('firstMessage', PrivateMessageType::class, array(
            'label' => false,
        ));

->add recipients部分返回所有用户并列出它们以供我选择其中几个。我希望默认情况下能够为捆绑包提供一个收件人。我尝试在ConversationType下创建一个类Form并编写以下代码:

    $builder->add('recipients', EntityType::class, array(
        'class'         => 'AppBundle:User',
        'multiple'      => true,
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('u')
                ->where('u.id', $id);
        },
        .....
    ));

但是我不认为该类是否覆盖了捆绑包,因为没有进行任何更改。

这样做的正确方法是什么?如果我的问题不够明确,请告诉我。 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

有一个关于如何覆盖或扩展表单字段的类似示例:http://symfony.com/doc/master/bundles/FOSUserBundle/overriding_forms.html

该示例基于覆盖FosUser寄存器格式:

<?php
// src/AppBundle/Form/RegistrationType.php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name');
    }

    public function getParent()
    {
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';

        // Or for Symfony < 2.8
        // return 'fos_user_registration';
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

    // For Symfony 2.x
    public function getName()
    {
        return $this->getBlockPrefix();
    }
}

如您所见,您必须指定要扩展的父表单。