我的RegistrationType类代码:
<?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';
}
}
它给了我标准的形式,添加了字段&#34;地址&#34;和&#34; mobileNumber&#34;。
我在哪里可以选择要使用的标准字段?
我应该改变什么才能获得&#34;地址&#34;和&#34; mobileNumber&#34;字段? 谢谢!
答案 0 :(得分:1)
如果您的问题是“如何从表单中删除字段”,那么:
解决方案1:
您可以使用该构建器方法
从表单中删除任何字段$builder->remove('your_field_name')
也许您还应该覆盖FOSUser控制器以填充用户实体的必填字段。这取决于您修改用户实体的方式。
解决方案2: 使用表单选项
看看https://knpuniversity.com/screencast/question-answer-day/remove-form-field
答案 1 :(得分:0)
关于这个主题有一篇非常好的文章:
<强> Overriding Default FOSUserBundle Forms 强>
您是否已通过form.type
代码将格式定义为服务?您是否在services.yml
(通过fos_user.registration.form
密钥)中告知FOS您的表单类型?
答案 2 :(得分:0)
这是我的代码示例,我会根据您的建议编写代码。我希望它可以帮助某人)感谢所有人!
<?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';
}
}