首页 > 解决方案 > 自定义 FOSUserBundle 的注册表单时未将新字段添加到数据库

问题描述

我正在使用 FOSUserBundle,我正在尝试按照以下教程自定义注册表单:

https://symfonycasts.com/screencast/fosuserbundle/customize-forms

但我有一个问题:

1- 即使在使用以下方法更新数据库后,新字段“nom”在数据库中也不可见:

php bin/控制台原则:模式:更新--force

结果:

无需更新 - 您的数据库已经与当前实体元数据同步。

在此处输入图像描述

register_content.html.twig:

{% trans_default_domain 'FOSUserBundle' %}

<h1> </h1>
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register'}}) }}

<label class="col-xs-12 col-sm-12 col-md-12 col-lg-12  form-control-label " for="name" >Nom d'utilisateur <span class="required"></span>
</label>
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9">
    {{ form_widget(form.username, {'attr': {'class' : 'form-control '}}) }}
</div>

<label class="col-xs-12 col-sm-12 col-md-12 col-lg-12  form-control-label " for="name" >E-mail <span class="required"></span>
</label>
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9">
    {{ form_widget(form.email, {'attr': {'class' : 'form-control '}}) }}
</div>


<label class="col-xs-12 col-sm-12 col-md-12 col-lg-12  form-control-label " for="name" >Password <span class="required"></span>
</label>
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9">
    {{ form_widget(form.plainPassword, {'attr': {'class' : 'form-control '}}) }}
</div>


<label class="col-xs-12 col-sm-12 col-md-12 col-lg-12  form-control-label " for="name" >Nom <span class="required"></span>
</label>
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9">
    {{ form_widget(form.nom, {'attr': {'class' : 'form-control '}}) }}
</div>

<div>
    <input class="btn btn-primary" type="submit" value="{{ 'registration.submit'|trans }}" />
</div>

{ form_end(form) }}

注册表格类型:

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

    public function getParent()
    {
        return BaseRegistrationFormType::class;
    }

    public function getBlockPrefix()
    {
        return 'storeData.form.registration';
    }
}

用户.php

/**
 *  @ORM\Entity(repositoryClass="StoreDataBundle\Repository\UserRepository")
 * @ORM\Table(name=" `user` ")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

/**
 * @ORM\Column(type="string", length=255)
 *
 * @Assert\NotBlank(message="Please enter your name.", groups= 
{"Registration", "Profile"})
 * @Assert\Length(
 *     min=3,
 *     max=255,
 *     minMessage="The name is too short.",
 *     maxMessage="The name is too long.",
 *     groups={"Registration", "Profile"}
 * )*/

    protected $nom;

    /**
     * @return mixed
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * @param mixed $nom
     */
    public function setNom($nom)
    {
        $this->nom = $nom;
    }

配置.yml

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: StoreDataBundle\Entity\User
    service:                               # this lines
        mailer: fos_user.mailer.twig_swift # this lines
    from_email:
        address: "hello@aquanote.com"
        sender_name: "AquaNote Postman"

    registration:
        form:
            type: StoreDataBundle\Form\RegistrationFormType

服务.yml

storeData.form.registration:
        class: StoreDataBundle\Form\RegistrationFormType
        tags:
            - { name: form.type }

安全.yml

security:

    encoders:
        StoreDataBundle\Entity\User: bcrypt


    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:

        main:

            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager

            anonymous: true

            logout: true

            remember_me:
                secret: '%secret%'

更新:用户.orm.yml

StoreDataBundle\Entity\User:
    type: entity
    table: null
    repositoryClass: StoreDataBundle\Repository\UserRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    lifecycleCallbacks: {  }

更新:

我发现了我的错误:我有一个 yml 文件和注释,这就是它不起作用的原因

标签: symfonyfosuserbundle

解决方案


推荐阅读