我有一个symfony 3应用程序,我用它将简单的Json发布到mysql数据库中。帖子请求如下所示:
/**
* @Rest\Post("/LegoPieces")
*/
public function postAction(Request $request)
{
$data = new LegoPieces;
$piece = $request->get('piece');
$type = $request->get('type');
$startDate = $request->get('startDate');
$endDate = $request->get('endDate');
if(empty($piece) || empty($type))
{
return new View("NULL VALUES ARE NOT ALLOWED", Response::HTTP_NOT_ACCEPTABLE);
}
$data->setPiece($piece);
$data->setType($type);
$data->setStartDate($startDate);
$data->setEndDate($endDate);
$em = $this->getDoctrine()->getManager();
$em->persist($data);
$em->flush();
return new View("LegoPieces Added Successfully", Response::HTTP_OK);
}
startDate的legoPieces实体如下所示:
/**
* @var DateTime
*
* @ORM\Column(name="startDate", type="datetime", nullable=true)
*/
private $startDate;
/**
* Set startDate
*
* @param datetime $startDate
*
* @return LegoPieces
*/
public function setStartDate($startDate)
{
$this->type = $startDate;
return $this;
}
/**
* Get startDate
*
* @return datetime
*/
public function getStartDate()
{
return $this->startDate;
}
但是,每次发出帖子请求时,只会将字符串(片段和类型)发布到数据库中。
答案 0 :(得分:2)
这里有两种选择。 1.没有表格类(Type)。在这种情况下,您必须从请求中获得的数据中手动创建\ DateTime对象。它可能看起来像这样(http://php.net/manual/en/datetime.createfromformat.php):
$data->setStartDate(date_create_from_format("format_string", "your_data string_from_request"));
2。第二个选项是使用Type类,又名Form。为您的实体创建该类(或使用控制台命令doctrine生成它:generate:form YourBundle:YourEntity)。然后在该类中指定您期望的数据类型,它可能看起来像这样:
$builder
->add(
'startDate',
DateTimeType::class,
[
'widget' => 'single_text',
'format' => "MM/dd/yyyy HH:mm"
]
)
上面的所有代码都是一个示例,您可能希望根据需要进行更改,例如上一个示例中的“格式”不关心时区。 我强烈建议使用Type类,您还应该使用约束来验证您的数据。