Symfony FOSRestBundle如何验证注册?
我正在使用FOSUserBundle和FOSRestBundle在Symfony 2.3.*中开发一个RESTFul API,我很难理解如何创建注册方法 我的控制器如下所示:Symfony FOSRestBundle如何验证注册?,symfony,fosuserbundle,fosrestbundle,Symfony,Fosuserbundle,Fosrestbundle,我正在使用FOSUserBundle和FOSRestBundle在Symfony 2.3.*中开发一个RESTFul API,我很难理解如何创建注册方法 我的控制器如下所示: class UserRestController extends FOSRestController { //Other Methods ... public function postUserAction() { $userManager = $this->get('fos
class UserRestController extends FOSRestController
{
//Other Methods ...
public function postUserAction()
{
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->createUser();
$param = $paramFetcher->all();
$form = $this->createForm(new UserType(), $user);
$form->bind($param);
if ($form->isValid() == false)
return $this->view($form, 400);
$userManager->updateUser($user);
return $this->view('User Created', 201);
}
//...
}
和我的UserType类:
class UserType extends BaseType
{
public function __construct($class = "User")
{
parent::__construct($class);
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('username', 'username')
->add('email', 'email')
->add('plainPassword', 'repeated', array(
'first_name' => 'password',
'second_name' => 'confirm',
'type' => 'password'
))
->add('lastname')
->add('firstname')
->add('job_position')
->add('phone')
->add('company_name')
->add('website')
->add('sector')
->add('address')
->add('city')
->add('zip_code')
->add('country')
->add('billing_infos_same_as_company')
->add('billing_address')
->add('billing_city')
->add('billing_zip')
->add('billing_country')
->add('putf')
->add('das');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Wipsea\UserBundle\Entity\User',
'csrf_protection' => false
));
}
public function getName()
{
return 'wipsea_user_registration';
}
}
当我测试它时,不管表单是无效的还是没有显示错误的。
当我尝试获取请求时:
验证失败“”此表单不应包含额外字段
是否有方法正确验证表单
编辑:更新我的问题。我建议您将本教程分为三个部分,其中包括您需要的所有内容:
public function postAction()
{
$user = new User();
$form = $this->createForm(new UserType(), $user);
$form->handleRequest($this->getRequest());
if ($form->isValid()) {
// propel version
$user->save();
$response = new Response();
$response->setStatusCode(201);
// set the `Location` header only when creating new resources
$response->headers->set('Location',
$this->generateUrl(
'acme_demo_user_get', array('id' => $user->getId()),
true // absolute
)
);
return $response;
}
// return form validation errors
return View::create($form, 400);
}
在本教程的第2部分中,您了解了有关创建表单、传递数据以及使用RestBundle验证表单的所有信息
还有很多关于使用REST与Symfony2的最佳实践的信息。请查看以下代码: 还要检查validation.yml和实体序列化程序yml文件 您不需要表单来进行验证。而且您不应该将用户创建和验证逻辑放在控制器中。如果您以后仍想使用该表单,例如,在后端渲染它,则必须编写两次相同的代码。我必须让getName()方法返回“”,才能使其对我起作用
看一看,我对symfony很陌生,我不理解答案的大部分代码。就像调度员的角色。这个答案似乎不适合我要找的。如果你遇到任何问题,请告诉我。事实上我是这样做的。我用FOSRest完成了我的UserClass并创建了一个UserType.php。我不明白为什么当我用正确的信息测试post路由时它不会验证,因为当我得到错误时,它告诉我没有错误。还有一件事:请粘贴实体类,因为您使用的是忘记导入的注释。你如何测试它?单元测试?我正在用Postman RestClient测试它,问题是我没有使用@Enum注释,即使我导入它,错误也是一样的。对于REST来说,这被认为是一种不好的做法。我想用表单验证,我知道这是可能的,但我无法验证表单。我不知道怎么做。如果您需要使用表单进行验证,这可能会帮助您:。查看第一个提示,它说:“当将表单映射到对象时,所有字段都被映射。表单上任何不存在于映射对象上的字段都将引发异常。”。确保所有字段都正确映射到您的实体(例如密码重新设置字段)。