<?php
namespace App\Controller\BackOffice;
use App\Entity\Device\DeviceConfiguration;
use App\Form\Type\BackOffice\DeviceConfigurationType;
use App\Model\PaginatedSearchCriteria;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route(path="device_configurations")
*/
class DeviceConfigurationsController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* @var FormFactoryInterface
*/
private $formFactory;
public function __construct(
EntityManagerInterface $entityManager,
FormFactoryInterface $formFactory
) {
$this->entityManager = $entityManager;
$this->formFactory = $formFactory;
}
/**
* @param Request $request
* @return Response
* @Route(path="", methods={"GET"})
*/
public function indexAction(Request $request): Response
{
$criteria = new PaginatedSearchCriteria($request->query);
$deviceConfigurations = $this->entityManager
->getRepository(DeviceConfiguration::class)
->search($criteria);
return $this->render(
'backOffice/deviceConfigurations/index.html.twig',
[
'deviceConfigurations' => $deviceConfigurations,
]
);
}
/**
* @Route(path="/new", methods={"GET", "POST"})
* @param Request $request
* @return RedirectResponse|Response
*/
public function newAction(Request $request)
{
$deviceConfiguration = new DeviceConfiguration();
$deviceConfigurationForm = $this->formFactory
->create(DeviceConfigurationType::class, $deviceConfiguration)
->add('submit', SubmitType::class);
$deviceConfigurationForm->handleRequest($request);
if ($deviceConfigurationForm->isSubmitted() && $deviceConfigurationForm->isValid()) {
/** @var DeviceConfiguration $deviceConfiguration */
$deviceConfiguration = $deviceConfigurationForm->getData();
$this->entityManager->persist($deviceConfiguration);
$this->entityManager->flush();
return $this->redirectToRoute(
'app_backoffice_deviceconfigurations_edit',
[
'deviceId' => $deviceConfiguration->getDeviceId(),
]
);
}
return $this->render(
'backOffice/deviceConfigurations/new.html.twig',
[
'deviceConfiguration' => $deviceConfiguration,
'deviceConfigurationForm' => $deviceConfigurationForm->createView(),
]
);
}
/**
* @Route(path="/{deviceId}", methods={"GET", "POST"})
* @param $deviceId
* @param Request $request
* @return Response
*/
public function editAction($deviceId, Request $request): Response
{
$deviceConfiguration = $this->loadDeviceConfiguration($deviceId);
$deviceConfigurationForm = $this->formFactory
->create(DeviceConfigurationType::class, $deviceConfiguration)
->add(
'submit',
SubmitType::class,
[
'label' => 'Save',
]
);
$deviceConfigurationForm->handleRequest($request);
if ($deviceConfigurationForm->isSubmitted() && $deviceConfigurationForm->isValid()) {
/** @var DeviceConfiguration $deviceConfiguration */
$deviceConfiguration = $deviceConfigurationForm->getData();
$this->entityManager->persist($deviceConfiguration);
$this->entityManager->flush();
return $this->redirectToRoute('app_backoffice_deviceconfigurations_index');
}
return $this->render(
'backOffice/deviceConfigurations/edit.html.twig',
[
'deviceConfiguration' => $deviceConfiguration,
'deviceConfigurationForm' => $deviceConfigurationForm->createView(),
]
);
}
/**
* @param $deviceId
* @return DeviceConfiguration
*/
protected function loadDeviceConfiguration($deviceId): object
{
$deviceConfiguration = $this->entityManager
->getRepository(DeviceConfiguration::class)
->find($deviceId);
if (!$deviceConfiguration) {
throw $this->createNotFoundException();
}
return $deviceConfiguration;
}
}