首页 > 解决方案 > Symfony:如何在编辑功能上检查控制器中的多种字符串类型

问题描述

我有 UserTasksController ,我想在表单中编辑时编辑多个字段。例如:如果 user1 在他的任务上有 status1 并且该状态用 status2 更改,我想更新"change_status_date"and "change_status_by"。我试图用布尔类型来做到这一点并且它有效,但我似乎无法在这里弄清楚。状态更改为 status2,但感兴趣的字段未更改(“change_status_date”和“change_status_by”)。我想对多个文件执行此操作,例如 priority 或 task category 。请帮忙。这是Controller中的编辑功能

    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');
        }

标签: symfony

解决方案


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

您能否确认它//status change可能带有回声进入 if 语句?如果从不输入 if 然后转储userTask->getStatus()and$form->getData()->getStatus()值,看看为什么会发生这种情况。

如果确实输入了,您可以转储$userTaskpersist()之前的内容以确认不采用您插入它们的值吗?如果他们获取$userTask对象中的值,那么您的数据库插入(flush() 方法)有问题,您应该查看错误日志以获取更多详细信息。


推荐阅读