我正在使用 POST REST 服务来创建一个新的“用户”。
我遵循本教程,它是法语,但我使用的代码应该是相同的。
因此,当我尝试使用我的 post rest 服务添加用户时,它起作用了。当我添加表单验证来验证我的请求的参数时,每个字段都返回一个错误“此值不应为空。”,但我发送了正确的值
使用 Postman 返回的错误:
{
"code": 400,
"message": "Validation Failed",
"errors": {
"errors": [
"This form should not contain extra fields."
],
"children": {
"firstname": {
"errors": [
"This value should not be blank."
]
},
"lastname": {
"errors": [
"This value should not be blank."
]
},
"email": {
"errors": [
"This value should not be blank."
]
}
}
}
}
我使用 PostMan 发送此代码:
{
"firstname": "Jimmy",
"lastname": "Sample",
"email": "[email protected]"
}
当我尝试打印时$form->submit($request->request->all());
,我得到了一个空数组,所以我想这就是问题所在。请参阅用户控制器代码。
请参阅我使用的代码:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="users",
* uniqueConstraints={@ORM\UniqueConstraint(name="users_email_unique",columns={"email"})}
* )
*/
class User
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $firstname;
/**
* @ORM\Column(type="string")
*/
protected $lastname;
/**
* @ORM\Column(type="string")
*/
protected $email;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getFirstname()
{
return $this->firstname;
}
public function setFirstname($firstname)
{
$this->firstname = $firstname;
}
public function getLastname()
{
return $this->lastname;
}
public function setLastname($lastname)
{
$this->lastname = $lastname;
}
public function getEmail()
{
return $this->email;
}
public function setEmail($email)
{
$this->email = $email;
}
}
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use FOS\RestBundle\Controller\Annotations as Rest; // alias pour toutes les annotations
use AppBundle\Form\Type\UserType;
use AppBundle\Entity\User;
class UserController extends Controller
{
[...]
/**
* @Rest\View(statusCode=Response::HTTP_CREATED)
* @Rest\Post("/users")
*/
public function postUsersAction(Request $request)
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->submit($request->request->all());
if ($form->isValid()) {
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($user);
$em->flush();
return $user;
} else {
return $form;
}
}
}
<?php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('firstname')
->add('lastname')
->add('email', EmailType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\User',
'csrf_protection' => false
]);
}
}
AppBundle\Entity\User:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email
properties:
firstname:
- NotBlank: {message: Noooooon il faut un prénom!!!}
- Type: string
lastname:
- NotBlank: ~
- Type: string
email:
- NotBlank: ~
- Email: ~
谢谢
您正在发送一个 json,然后需要对 json 进行解码
$json = $request->getContent();
if ($decodedJson = json_decode($json, true)) {
$data = $decodedJson;
} else {
$data = $request->request->all();
}
$formData = [];
foreach ($form->all() as $name => $field) {
if (isset($data[$name])) {
$formData[$name] = $data[$name];
}
}
$form->submit($formData);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句