我在Symfony项目中安装了FOSUserBundle。现在我想删除FOSUserBundle默认提供的注册表单字段。
注册表格字段是:
用户名
电子邮件ID
密码
重复密码
现在,当用户注册时我不想要Email
字段,所以我在我的包中覆盖注册表单。
\\ Front\FrontBundle\Form\RegistrationType.php
<?php
namespace Front\FrontBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->remove('email'); // here I code for remove email field.
}
public function getParent()
{
return 'FOS\UserBundle\Form\Type\RegistrationFormType';
// Or for Symfony < 2.8
// return 'fos_user_registration';
}
public function getBlockPrefix()
{
return 'app_user_registration';
}
// For Symfony 2.x
public function getName()
{
return $this->getBlockPrefix();
}
}
然后我更改config.yml和services.yml文件
\\ App/config/config.yml
fos_user:
db_driver: orm
firewall_name: main
user_class: Front\FrontBundle\Entity\User
registration:
form:
type: Front\FrontBundle\Form\RegistrationType
\\app/config/services.yml
services:
app.form.registration:
class: Front\FrontBundle\Form\RegistrationType
tags:
- { name: form.type, alias: app_user_registration }
所以完成此电子邮件字段后,请从我的注册表中删除,但在填写username
,password
,repeat password
之后我提交表单时,它会给我任何错误{ {1}}。
所以我需要更改任何其他文件以使用电子邮件字段删除电子邮件验证?
感谢。
答案 0 :(得分:0)
您可以像现在一样删除该字段,但必须确保没有需要它的残留服务器端验证。
如何执行此操作取决于您如何扩展FOS用户类(或者如果有)。
带注释的约束例如(来自the docs)
class Author
{
/**
* @Assert\NotBlank() <--- remove this
*/
public $name;
}
或者其他一切都失败了(我认为这很麻烦),在致电isValid()
之前在控制器中发出默认值。
public function someAction(Request $request) {
// ...
$user = new User();
// fill empty value
$user->setEmail('blank@blank.blank');
// form stuff here
// ...
if ($form->isValid()) {
// do some stuff
}
return $this->render(blahblahbal);
}