Symfony - 如何使用默认值反序列化?
Symfony - How to deserialize with default values?
我开始学习 Symfony 4。
我想从 json 数据中反序列化数据。 (我正在使用 JMSSerializer)
这是我的背景:
我在 src/App/Entity
中有一个客户实体
class Customer {
/**
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotBlank()
*/
private $name;
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotNull
*/
private $comment;
public function __construct() {
$this->comment = "";
}
}
我在 src/App/Controller
中有一个 CustomerController 控制器
class CustomerController extends Controller
{
/**
* @Route("/customers", name="customer_create")
* @Method({"POST"})
*/
public function createAction(Request $request)
{
$data = $request->getContent();
//Il faudrait valider les données avant de les mettre en base de données
$customer = $this->get('jms_serializer')->deserialize($data, 'App\Entity\Customer', 'json');
$em = $this->getDoctrine()->getManager();
$em->persist($customer);
$em->flush();
return new Response('', Response::HTTP_CREATED);
}
}
我 post 使用以下 JSON 数据创建客户的请求:
{"name":"Customer Lambda"}
但是我有以下错误
NotNullConstraintViolationException
An exception occurred while executing 'INSERT INTO customers (id, name, comment) VALUES (?, ?, ?, ?)' with params [Resource id #99, "Customer Lambda", null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comment'
cannot be null
是否可以在反序列化后为评论字段设置一个默认值(空字符串)?我以为在 Customer 构造函数中设置它会解决问题,但事实并非如此。
1º 如果您已将评论定义为不可为空,为什么要尝试设置空字符串。
2º
这个:
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotNull
*/
private $comment = "";
public function __construct() {
}
改为:
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotNull
*/
private $comment;
public function __construct() {
$this->comment = "";
}
我开始学习 Symfony 4。
我想从 json 数据中反序列化数据。 (我正在使用 JMSSerializer)
这是我的背景: 我在 src/App/Entity
中有一个客户实体class Customer {
/**
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotBlank()
*/
private $name;
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotNull
*/
private $comment;
public function __construct() {
$this->comment = "";
}
}
我在 src/App/Controller
中有一个 CustomerController 控制器class CustomerController extends Controller
{
/**
* @Route("/customers", name="customer_create")
* @Method({"POST"})
*/
public function createAction(Request $request)
{
$data = $request->getContent();
//Il faudrait valider les données avant de les mettre en base de données
$customer = $this->get('jms_serializer')->deserialize($data, 'App\Entity\Customer', 'json');
$em = $this->getDoctrine()->getManager();
$em->persist($customer);
$em->flush();
return new Response('', Response::HTTP_CREATED);
}
}
我 post 使用以下 JSON 数据创建客户的请求:
{"name":"Customer Lambda"}
但是我有以下错误
NotNullConstraintViolationException
An exception occurred while executing 'INSERT INTO customers (id, name, comment) VALUES (?, ?, ?, ?)' with params [Resource id #99, "Customer Lambda", null]:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'comment' cannot be null
是否可以在反序列化后为评论字段设置一个默认值(空字符串)?我以为在 Customer 构造函数中设置它会解决问题,但事实并非如此。
1º 如果您已将评论定义为不可为空,为什么要尝试设置空字符串。
2º
这个:
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotNull
*/
private $comment = "";
public function __construct() {
}
改为:
/**
* @ORM\Column(type="string", length=250)
* @Assert\NotNull
*/
private $comment;
public function __construct() {
$this->comment = "";
}