Warm tip: This article is reproduced from serverfault.com, please click

其他-Symfony:如何在编辑功能的控制器中检查多种字符串类型

(其他 - Symfony : how to check multiple string types in the controller on edit function)

发布于 2020-11-30 00:28:34

我有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');
        }
Questioner
ioana
Viewed
0
Kolovos Konstantinos 2020-11-30 19:40:09

你的代码对我来说似乎没有问题。

你能否确认它//status change是否可以通过回显输入到if语句中?如果从不输入,则转储userTask->getStatus()$form->getData()->getStatus()值,然后查看发生这种情况的原因。

如果确实输入,你是否可以$userTask在persist()之前转储以确认未采用你插入它们的值?如果它们采用$userTask对象中的值,则说明你从数据库插入中遇到问题(flush()方法),并且应该查看错误日志以获取更多详细信息。