所以我在symfony中有这个简单的表单,我只有3个字段。所有在这里工作的ID都是一个不在表单上但在数据库中的实体是df_date列,它在DB中的类型为DATE。
以下是该实体:
/**
* @ORM\Column(type="date")
* @ORM\Id
*/
protected $df_date;
/**
* Set df_date
*
* @param \DateTime $dfDate
* @return WeatherSpecials
*/
public function setDfDate($dfDate)
{
$this->df_date = $dfDate;
return $this;
}
/**
* Get df_date
*
* @return \DateTime
*/
public function getDfDate()
{
return $this->df_date;
}
控制器:
public function ajax_weather_specialsAction(Request $request, $main_id)
{
$params = array();
if (!$main_id) {
/*
$repository = $this->getDoctrine()
->getRepository('AppBundle:WeatherSpecials');
$weather_specials = $repository->find($main_id);
*/
} else {
$weather_specials = new WeatherSpecials;
}
$form = $this->createFormBuilder($weather_specials)
->add('df_weather', 'choice', array(
'choices' => array(
null, 'SU', 'PC', 'CL', 'RN'
),
'label' => false, 'required' => true,
))
->add('df_temptur', 'number', array('label' => false, 'required' => true))
->add('df_specday', 'text', array('label' => false, 'required' => false))
->add('save', 'submit', array('attr' => array('class' => 'btn btn-primary')))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($weather_specials);
// How to set df_date here???
$em->flush();
}
}
$data['status'] = 'success';
$data['html'] = $this->render('sales_tabs/weather_specials.twig', array('form' => $form->createView()))->getContent();
return new JsonResponse($data);
}
问题是,如何在将表单保存到数据库之前设置df_date?
答案 0 :(得分:0)
假设~/.vimrc
是您要设置WeatherSpecials
的实体,请先保留它;
df_date
或使用doctrine HasLifecycleCallbacks;
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$weather_specials->setDfDate(new \DateTime());
$em->persist($weather_specials);
$em->flush();
}
答案 1 :(得分:0)
您可以在保留实体之前手动设置日期。
考虑以下代码
if ($form->isSubmitted()) {
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$weather_specials->setDfDate(new \DateTime());
$em->persist($weather_specials);
$em->flush();
}
}
这会将日期设置为当前日期和时间。您可以根据需要更改日期时间值。
您甚至可以使用Doctrine的preUpdate
或prePersist
回调。
更新您的实体定义不正确。您应该将$df_date
定义为\Datetime
参数。在您的代码中更改此内容
/**
* @var \datetime
* @ORM\Column(type="date")
* @ORM\Id
*/
protected $df_date;
//the rest of your stuff
答案 2 :(得分:0)
我发现了这个问题,并且Doctrine可以用它的建议亲吻我的......花了我3天的时间来计算出这一个,我花了5分钟时间用PHP来计算它。 enter link description here