FOSUserBundle:如何在表单中添加自定义字段?

时间:2015-04-11 09:51:59

标签: symfony doctrine-orm fosuserbundle

我安装了FOSUserBundle并扩展了注册和个人资料表单以满足我的网站外观,所以现在我的个人资料表单位于app \ Resources \ FOSUserBundle \ views \ Profile中。一切都很好。

我在我的User实体中添加了一些字段,运行doctrine:generate:entities和doctrine:schema:update并且db已正确更新,但我不知道如何在edit.html.twig中添加这些新字段在上面的文件夹中,我只是希望能够将它们添加到模板中。

谢谢

2 个答案:

答案 0 :(得分:1)

您必须先创建自定义表单,例如

// src/AppBundle/Form/UserType.php

namespace AppBundle\Form;

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

class UserType extends AbstractType {

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

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

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

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

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

将表单类型配置为服务

# app/config/services.yml
services:
    app.form.profile:
        class: AppBundle\Form\UserType
        tags:
            - { name: form.type, alias: app_user_profile }

以及要扩展/覆盖的配置文件

# app/config/config.yml
fos_user:
    # ...
    profile:
        form:
            type: AppBundle\Form\UserType
            # if you are using Symfony < 2.8 you should use the type name instead
            # type: app_user_profile

答案 1 :(得分:0)

您需要在UserType中添加以下内容:

class UserType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */    
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
         $builder
            //for each new field
             ->add('myNewField')
         ;
     }
}

然后您的字段将在您的Twig模板中可用。 希望这有帮助