<?php namespace App\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use App\Repository\ProjectRepository; use App\Entity\ProjectEntity; use App\Form\Project\ProjectAddForm; use Symfony\Component\Routing\Exception\ResourceNotFoundException; use App\Form\Project\ProjectEditForm; class ProjectController extends AbstractExtendedController { /** * Projects list * * @param Request $request * @return Response */ public function projects(Request $request): Response { // Get repositories $entityManager = $this->getDoctrine()->getManager(); /** @var ProjectRepository $projectRepository */ $projectRepository = $entityManager->getRepository(ProjectEntity::class); // Project add form /** @var ProjectAddForm $projectAddForm */ $projectAddForm = $this->createNamedCustomForm('projectAdd', ProjectAddForm::class); $projectAddForm->handleRequest($request); if ($projectAddForm->isSubmitted() && $projectAddForm->isSubmitted()) { $errors = $projectAddForm->validate(); if (empty($errors)) { $project = $projectAddForm->getProject(); $entityManager->persist($project); $entityManager->flush(); return $this->ajaxFormAnswer([ 'refresh' => true, 'reset' => true ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Get projects $projects = $projectRepository->findAll(); return $this->render("project/projects.html.twig", [ 'projects' => $projects, 'projectAddForm' => $projectAddForm, ]); } /** * Project edit page * * @param string $id * @param Request $request * @return Response */ public function project(string $id, Request $request): Response { // Get repositories $entityManager = $this->getDoctrine()->getManager(); /** @var ProjectRepository $projectRepository */ $projectRepository = $entityManager->getRepository(ProjectEntity::class); // Get project $project = $projectRepository->find($id); if(is_null($project)) { throw new ResourceNotFoundException(); } // Project edit form /** @var ProjectEditForm $projectEditForm */ $projectEditForm = $this->createNamedCustomForm('projectEdit', ProjectEditForm::class); $projectEditForm->handleRequest($request); if($projectEditForm->isSubmitted() && $projectEditForm->isValid()) { $errors = $projectEditForm->validate(); if (empty($errors)) { $projectEditForm->updateProject($project); $entityManager->persist($project); $entityManager->flush(); return $this->ajaxFormAnswer([ 'refresh' => true, ]); } return $this->ajaxFormAnswer([ 'error' => join('<br/>', $errors), 'code' => Response::HTTP_BAD_REQUEST, ]); } // Update form $projectEditForm->updateFields($project); return $this->render("project/project.html.twig", [ 'project' => $project, 'projectEditForm' => $projectEditForm, ]); } }