我有UserTasksController,在该窗体中进行编辑时,我想在其中编辑多个字段。例如:如果user1的任务上具有status1,并且该状态已用status2更改,则我想更新"change_status_date"
and "change_status_by"
。我想用布尔类型来做到这一点,它的工作,但我似乎无法在这里弄清楚。状态更改为status2,但感兴趣的字段未更改(“ change_status_date”和“ change_status_by”)。我想对多个文件执行此操作,例如优先级或任务类别。请heel脚。这是控制器中的编辑功能
public function edit(Request $request, $id): Response
{
$userTask = new UserTasks();
$userTask = $this->getDoctrine()->getRepository(UserTasks::class)->find($id);
$form = $this->createFormBuilder($userTask)
->add('name')
->add('description')
->add('completed', CheckboxType::class, [
'required' => false,
'label_attr' => ['class' => 'checkbox-custom ',
],
])
->add('active', CheckboxType::class, [
'required' => false,
'label_attr' => ['class' => 'checkbox-custom ',
],
])
->add('due_date', DateType::class, [
'widget' => 'choice',
])
->add('category', EntityType::class, [
'class' => TaskCategories::class
])
->add('task_type', EntityType::class, [
'class' => TaskTypes::class
])
->add('status', EntityType::class, [
'class' => TaskStatuses::class
])
->add('priority', EntityType::class, [
'class' => TaskPriority::class
])
->add('created_for', EntityType::class, [
'class' => Users::class
])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$userTask->setLastUpdateDate(new \DateTime());
$userTask->setLastUpdatedBy($this->getUser());
// active change
if ($userTask->getActive() == '0') {
$userTask->setDeleted('1');
$userTask->setVisible('0');
}
// completed changes
if ($userTask->getCompleted() == '0') {
$userTask->setDeleted('0');
$userTask->setVisible('1');
$userTask->setActive('1');
}
//status change
if( $userTask->getStatus() != $form->getData()->getStatus () ){
$userTask->setChangeStatusDate(new \DateTime());
$userTask->setChangeStatusBy($this->getUser());
}
$em = $this->getDoctrine()->getManager();
$em->persist($userTask);
$em->flush();
return $this->redirectToRoute('user_tasks_index');
}
你的代码对我来说似乎没有问题。
你能否确认它//status change
是否可以通过回显输入到if语句中?如果从不输入,则转储userTask->getStatus()
和$form->getData()->getStatus()
值,然后查看发生这种情况的原因。
如果确实输入,你是否可以$userTask
在persist()之前转储以确认未采用你插入它们的值?如果它们采用$userTask
对象中的值,则说明你从数据库插入中遇到问题(flush()方法),并且应该查看错误日志以获取更多详细信息。
在输入// status chage if语句之前,它已经以某种方式已经更新了状态。我真的不明白为什么。
很好,我们走在正确的轨道上。现在,如果将一个与isSubmitted()一起使用,将一个与isValid()一起使用(而不是两个都使用)。我的猜测是,您输入一次,然后进行更改,然后再次更改。因此,您只看到最后的更改。如果是这种情况,则您需要一个在另一个内部的工具,以使其正常工作并修复此错误。
非常感谢您:)您是救命稻草!