如何使用我自己的字段(Symfony 3)覆盖 FOSUserBundle 表单?
How can I override FOSUserBundle form using my own fields(Symfony 3)?
我的注册类型class代码:
<?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('adress');
$builder->add('mobileNumber');
}
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
public function getBlockPrefix()
{
return 'app_user_registration';
}
}
它给我添加了字段 "adress" 和 "mobileNumber" 的标准表格。
我在哪里可以选择要使用的标准字段?
我应该更改什么以仅获取 "adress" 和 "mobileNumber" 字段?
谢谢!
关于这个主题有一篇非常好的文章:
Overriding Default FOSUserBundle Forms
您是否通过 form.type
标签将您的格式定义为服务?您是否已在 services.yml
(通过 fos_user.registration.form
键)中告知 FOS 您的表单类型?
如果您的问题是 "How to remove fields from a form" 那么:
解决方案 1:
您可以使用该构建器方法从表单中删除任何字段
$builder->remove('your_field_name')
也许您还应该覆盖 FOSUser 控制器以填充您的用户实体的必填字段。这取决于您如何修改用户实体。
方案二:
使用表单选项
看这里https://knpuniversity.com/screencast/question-answer-day/remove-form-field
这是我的代码示例,是我根据您的建议编写的。我希望它对某人有所帮助)谢谢大家!
<?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('address', null, [
'label' => 'Адрес дома',
'attr'=> [
'placeholder' => 'placeholder-text'
]
]);
$builder->add('mobileNumber', null, [
'label' => 'Мобильный телефон',
'attr'=> [
'placeholder' => '+7 (999) 123-45-67'
]
]);
$builder->add('username', null, [
'label' => 'ФИО',
'attr'=> [
'placeholder' => 'Иванов Иван Иванович'
]
]);
$builder->remove('email');
$builder->remove('plainPassword');
}
public function getParent()
{
// return 'fos_user_registration';
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
public function getName()
{
return $this->getBlockPrefix();
}
public function getBlockPrefix()
{
return 'app_user_registration';
}
}
我的注册类型class代码:
<?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('adress');
$builder->add('mobileNumber');
}
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
public function getBlockPrefix()
{
return 'app_user_registration';
}
}
它给我添加了字段 "adress" 和 "mobileNumber" 的标准表格。
我在哪里可以选择要使用的标准字段?
我应该更改什么以仅获取 "adress" 和 "mobileNumber" 字段? 谢谢!
关于这个主题有一篇非常好的文章:
Overriding Default FOSUserBundle Forms
您是否通过 form.type
标签将您的格式定义为服务?您是否已在 services.yml
(通过 fos_user.registration.form
键)中告知 FOS 您的表单类型?
如果您的问题是 "How to remove fields from a form" 那么:
解决方案 1:
您可以使用该构建器方法从表单中删除任何字段
$builder->remove('your_field_name')
也许您还应该覆盖 FOSUser 控制器以填充您的用户实体的必填字段。这取决于您如何修改用户实体。
方案二: 使用表单选项
看这里https://knpuniversity.com/screencast/question-answer-day/remove-form-field
这是我的代码示例,是我根据您的建议编写的。我希望它对某人有所帮助)谢谢大家!
<?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('address', null, [
'label' => 'Адрес дома',
'attr'=> [
'placeholder' => 'placeholder-text'
]
]);
$builder->add('mobileNumber', null, [
'label' => 'Мобильный телефон',
'attr'=> [
'placeholder' => '+7 (999) 123-45-67'
]
]);
$builder->add('username', null, [
'label' => 'ФИО',
'attr'=> [
'placeholder' => 'Иванов Иван Иванович'
]
]);
$builder->remove('email');
$builder->remove('plainPassword');
}
public function getParent()
{
// return 'fos_user_registration';
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}
public function getName()
{
return $this->getBlockPrefix();
}
public function getBlockPrefix()
{
return 'app_user_registration';
}
}