想要以 symfony 形式添加可選的 DateType 類。它有點作業,因為我可以在不設定日期的情況下提交表單,但它會自動設定今天的日期。
TodoType.php
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name')
->add('Deadline', DateType::class, [
'widget' => 'single_text',
'required' => false,
'empty_data' => ''
])
->add('Submit', SubmitType::class)
;
}
截止日期物體
/**
* @ORM\Column(type="date", nullable=true)
*/
private $deadline;
...
public function getDeadline(): ?\DateTimeInterface
{
return $this->deadline;
}
public function setDeadline(\DateTimeInterface $deadline = null): self
{
$this->deadline = $deadline;
return $this;
}
TodoController.php
/**
* @Route("/todos", methods={"GET", "POST"}, name="todos")
*
*/
public function todos(EntityManagerInterface $entityManager, Request $request): Response
{
// Rendering todos
$todos = $entityManager->getRepository(Todo::class)
->findBy(
['owner' => $this->getUser()]
);
// Creating new TODO
$todo = new Todo();
$todo
->setOwner($this->getUser())
->setCreationDate(new \DateTime());
$form = $this->createForm(TodoType::class, $todo);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$entityManager->persist($todo);
$entityManager->flush();
return $this->redirectToRoute('todos');
}
return $this->render('todo/todos.html.twig', [
'todos' => $todos,
'form' => $form->createView(),
]);
}
要在 .twig 中渲染,我{{ form(form) }}還沒有自定義它。
編輯:缺少代碼
uj5u.com熱心網友回復:
每件事看起來都不錯。
我在我這邊嘗試過,它作業正常(在資料庫中,我得到了空值):表單:
$builder->add(
'dateTime', DateType::class, [
'required' => false,
'widget' => 'single_text',
'empty_data' => ''
]
);
物體
public function __construct() {
// empty
}
/**
* @var DateTime|null
* @ORM\Column(name="date_time", type="datetime", nullable=true)
*/
private ?DateTime $dateTime;
/**
* @return DateTime|null
*/
public function getDateTime(): ?DateTime
{
return $this->dateTime;
}
/**
* @param DateTime|null $dateTime
*
* @return SupportTimeSlot
*/
public function setDateTime(?DateTime $dateTime): SupportTimeSlot
{
$this->dateTime = $dateTime;
return $this;
}
控制器
/**
* @Route("/time-slot-detail/{id}", name="time_slot_detail", methods={"GET", "POST"})
* @param SupportTimeSlot $supportTimeSlot
* @param Request $request
* @param SupportTimeSlotManager $supportTimeSlotManager
*
* @return Response
*/
public function timeSlotDetail(
SupportTimeSlot $supportTimeSlot,
Request $request,
SupportTimeSlotManager $supportTimeSlotManager
): Response
{
$form = $this->createForm(TimeSlotEditType::class, $supportTimeSlot);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$supportTimeSlotManager->save($supportTimeSlot);
return $this->redirectToRoute('boa_support_time_slot_detail', ['id' => $supportTimeSlot->getId()]);
}
return $this->render(
'boa/support/detail.twig', [
'timeSlot' => $supportTimeSlot,
'form' => $form->createView(),
]
);
}
枝條
<div class="row">
<div class="col-12">
{{ form_start(form) }}
{{ form_row(form.dateTime) }}
<button type="submit" class="btn btn-block btn-outline-info">
{% trans %}Save{% endtrans %}
</button>
{{ form_end(form) }}
</div>
</div>
我的專案包含一些 datepicker 和 datetimepicker js,也許嘗試實體化 js 以檢查它是否來自于此。
否則嘗試在您的控制器中除錯您的 $request 。如果它為您的截止日期屬性提供了某個日期,則您的問題來自 twig/js 如果 $request 為空但您的物體填充了截止日期的資料,則您的問題來自您的構造如果您使用有限的截止日期保存您的物體,但您得到了一個在資料庫中,您的問題來自您的資料庫
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380547.html
