如何在Symfony 4中重写FOSUserBundle表单
我想覆盖FOSUserBundle的RegistrationType表单,但在registration_content.html.twig模板中,我遇到了以下错误: 属性“firstname”或方法“firstname()”、“getfirstname()”/“isfirstname()”/“hasfirstname()”或“uu call()”都不存在,并且在类“Symfony\Component\Form\FormView”中都没有公共访问权限 这是我的注册类型表:如何在Symfony 4中重写FOSUserBundle表单,symfony,twig,fosuserbundle,symfony4,Symfony,Twig,Fosuserbundle,Symfony4,我想覆盖FOSUserBundle的RegistrationType表单,但在registration_content.html.twig模板中,我遇到了以下错误: 属性“firstname”或方法“firstname()”、“getfirstname()”/“isfirstname()”/“hasfirstname()”或“uu call()”都不存在,并且在类“Symfony\Component\Form\FormView”中都没有公共访问权限 这是我的注册类型表: class Re
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;
}
注册_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) }}
我在学习官方教程时遇到了同样的问题 我无法解释为什么会出现这个问题,但它似乎与别名有关。无论如何,我无法让它在Symfony4和symfony3.4中工作 我使用了以下代码来规避此问题:
class RegistrationType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstname');
}
public function getParent() {
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
}
然后将此行添加到fos_user.yaml:
fos_user:
registration:
form:
type: App\Form\Type\RegistrationType
我希望这会有所帮助,直到有人找到一种方法,使它如预期的那样工作
$builder
->add('first');
$builder
->add('last');
}
public function getParent()
{
return BaseRegistrationFormType::class;
}
}
公共函数buildForm(FormBuilderInterface$builder、array$options)
{
$builder
->add('first');
$builder
->add('last');
}
public function getParent()
{
return BaseRegistrationFormType::class;
}
}
以上假设您已向用户实体添加了两个新字段,并且已运行条令迁移以添加新字段。
提示:将字段设置为可空,这样您就不会使用FOS命令行工具
form:
type: App\Form\RegistrationFormType
class: App\Form\RegistrationFormType
form:
type: App\Form\RegistrationFormType
class: App\Form\RegistrationFormType
mkdir./src/Form/Type
cp./vendor/friendsofsymfony/user bundle/Form/Type/RegistrationFormType.php
/config/packages/fos\u user.yaml
/src/Form/Type/RegistrationFormType.php
- 这些信息大部分都是从中获得的
- 我没有研究
方法,但它似乎继承了原始的getParent
,只是添加了我们在RegistrationFormType.php
方法中所做的更改buildForm
- 就我而言,我做了与罗伯特·塞勒相同的事情,但编辑了以下内容:
public function getBlockPrefix()
{
return 'app_user_registration';
}
这对我来说很好!不确定您在问题中加入了多少
User
类,但是您是否为其他属性添加了getter和setter?由于$firstname
受到保护,您需要有getFirstname
和setFirstname
方法。@dlondro是的,我已经添加了sett呃methodsCache被清除了?你知道…什么都没有,即使有缓存:清除
public function getBlockPrefix()
{
return 'app_user_registration';
}