在Symfony发布日期?

时间:2017-12-14 21:50:56

标签: php mysql symfony

我有一个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;
}

但是,每次发出帖子请求时,只会将字符串(片段和类型)发布到数据库中。

1 个答案:

答案 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类,您还应该使用约束来验证您的数据。