Обновление данных формы в другом действии контроллера в Symfony - PullRequest
0 голосов
/ 05 мая 2020

через EditController Я позволяю пользователю изменять свой элемент. то я хочу обработать процедуру обновления в другом контроллере (UpdateController). Но это не работает! Он создает новый элемент вместо обновления элемента. В UpdateController я использовал dd (...). Я обнаружил, что Id и Profile не перенаправляются в UpdateController. Надеюсь, вы поможете мне с этим.

/**
 * @IsGranted("ROLE_USER")
 * Class EditController
 * @package App\Controller
 */
final class EditController extends AbstractController
{
    /**
     * @Route("/item/edit/{items}", name="edit_item")
     *
     * @param Items $items
     * @return Response
     */
    public function edit(Items $items)
    {
        $form = $this->createForm(CreateTodoFormType::class, $items, ['action' => $this->generateUrl('update_item')]);

        return $this->render('item/edit.html.twig', [
            'todoForm' => $form->createView(),
            'viewData' => $form->getViewData()
        ]);
    }
}

Это UpdateController

/**
 * @IsGranted("ROLE_USER")
 * Class UpdateController
 * @package App\Controller\Item
 */
final class UpdateController extends AbstractController
{
    /**
     * @Route("/item/update", name="update_item", methods={"POST"})
     */
    public function update(EntityManagerInterface $em, Request $request, TranslatorInterface $translator)
    {
        $form = $this->createForm(CreateTodoFormType::class);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $item = $form->getData();

            $profile = $em->getRepository(Profile::class)->findProfileById($this->getUser()->getId());

            $item->setProfile($profile);
            $em->persist($item);
            $em->flush();

            $this->addFlash('success', $translator->trans('The new ToDo is updated.'));

            return $this->redirectToRoute('item');
        }

        return $this->render('item/edit.html.twig', [
            'todoForm' => $form->createView(),
        ]);
    }
}
...