gpt4 book ai didi

symfony - 如何在 Symfony 4 中覆盖 FOSUserBundle 表单

转载 作者:行者123 更新时间:2023-12-03 23:30:23 24 4
gpt4 key购买 nike

我想覆盖 FOSUserBundle 的 RegistrationType 的形式,但是在 registration_content.html.twig 模板中我得到了这个错误:

Neither the property "firstname" nor one of the methods "firstname()", "getfirstname()"/"isfirstname()"/"hasfirstname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".

这是我的 RegistrationType 表单:

    class RegistrationType extends AbstractType {

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

public function getParent() {
return 'fos_user_registration';
}

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

}

fos_user.yaml:

fos_user:
registration:
confirmation:
enabled: true
form:
name: app_user_registration
db_driver: orm
user_class: App\Entity\User
firewall_name: main
from_email:
address: foo@example.com
sender_name: bar@example.com

用户实体:

class User extends BaseUser {
//

/**
* @ORM\Column(type="string", length=50, nullable=true)
*/
protected $firstname;
}

registration_content.html.twig:

    {{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register'), 'attr': {'class': 'fos_user_registration_register', 'id': 'form-sign-up'}}) }}
<div class="form-group form-group--float form-group--centered">
{{ form_widget(form.firstname, {'attr': {'class': 'form-control'}}) }}
<label>{{ 'firstname'|trans }}</label>
<i class="form-group__bar"></i>
</div>
{{ form_end(form) }}

在我的配置服务中我已经放了这个:

app.form.registration:
class: App\Form\RegistrationType
tags:
- { name: form.type, alias: app_user_registration }

最佳答案

工作示例

Symfony 4.2.3 | Friendsofsymfony/user-bundle v2.1.2

使用我们自己的类覆盖 FOSUserBundle 注册表单并删除“用户名”字段以作为示例。

从你的 symfony 根目录:

  1. mkdir ./src/Form/Type
  2. cp ./vendor/friendsofsymfony/user-bundle/Form/Type/RegistrationFormType.php
  3. 编辑./config/packages/fos_user.yaml
# fos_user.yaml
fos_user:

#... other configurations...

registration:
form:
type: App\Form\Type\RegistrationType
  1. 编辑./src/Form/Type/RegistrationFormType.php
// Our specific example. edit this as you please...
<?php

namespace App\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseRegistrationFormType;

class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->remove('username');
}
public function getParent() {
return BaseRegistrationFormType::class;
}
}

注意:由于我们的示例仅删除了一个字段,因此我们删除了未更改的代码并添加以下方法以保持简单:

public function getParent() {
return BaseRegistrationFormType::class;
}
  • 大部分信息来自 @Gabriel Deschamps@Robert Saylor回答。
  • 我没有研究 getParent 方法,但它似乎继承自原始 RegistrationFormType.php 并简单地添加我们在 buildForm 方法。

关于symfony - 如何在 Symfony 4 中覆盖 FOSUserBundle 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48815534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com