Exemple #1
0
 /**
  * {@inheritdoc}
  */
 public function call(ActionEvent $event)
 {
     $controller = $event->getController();
     $request = $event->getRequest();
     $dataProvider = $event->getDataProvider();
     $dispatcher = $controller->get('event_dispatcher');
     $formProvider = $controller->get('vardius_crud.form.provider');
     if ($id = $request->get('id')) {
         $data = $dataProvider->get($id);
         $this->checkRole($controller, $data);
     } else {
         $data = $dataProvider->create();
         $this->checkRole($controller);
     }
     $repository = $dataProvider->getSource();
     $form = $formProvider->createForm($event->getFormType(), $data);
     $crudEvent = new CrudEvent($repository, $controller, $form);
     $dispatcher->dispatch(CrudEvents::CRUD_PRE_SAVE, $crudEvent);
     $responseHandler = $this->getResponseHandler($controller);
     if ($request->isMethod('POST')) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             if ($data->getId()) {
                 $dispatcher->dispatch(CrudEvents::CRUD_PRE_UPDATE, $crudEvent);
                 $dataProvider->update($data);
                 $dispatcher->dispatch(CrudEvents::CRUD_POST_UPDATE, $crudEvent);
             } else {
                 $dispatcher->dispatch(CrudEvents::CRUD_PRE_CREATE, $crudEvent);
                 $dataProvider->add($data);
                 $dispatcher->dispatch(CrudEvents::CRUD_POST_CREATE, $crudEvent);
             }
             $dispatcher->dispatch(CrudEvents::CRUD_POST_SAVE, $crudEvent);
             $routeName = rtrim(rtrim($request->get('_route'), 'edit'), 'add') . 'show';
             if (!$controller->get('router')->getRouteCollection()->get($routeName)) {
                 $routeName = rtrim($routeName, 'show') . 'list';
             }
             if (!$controller->get('router')->getRouteCollection()->get($routeName)) {
                 $flashBag = $request->getSession()->getFlashBag();
                 $flashBag->add('success', 'save.success');
                 return $controller->redirect($responseHandler->getRefererUrl($controller, $request, ['id' => $data->getId()]));
             }
             if ($this->options['response_type'] === 'html') {
                 return $controller->redirect($controller->generateUrl($routeName, ['id' => $data->getId()]));
             } else {
                 return $responseHandler->getResponse($this->options['response_type'], '', '', ['data' => $data], self::ACTION_CODE);
             }
         } elseif ($this->options['response_type'] === 'json') {
             $formErrorHandler = $controller->get('vardius_crud.form.error_handler');
             return new JsonResponse(['message' => 'Invalid form data', 'errors' => $formErrorHandler->getErrorMessages($form)], 400);
         }
     }
     $params = ['data' => $data];
     if ($this->options['response_type'] === 'html') {
         $params = array_merge($params, ['form' => $form->createView()]);
     }
     $paramsEvent = new ResponseEvent($params);
     $crudEvent = new CrudEvent($repository, $controller, $paramsEvent);
     $dispatcher->dispatch(CrudEvents::CRUD_SAVE_PRE_RESPONSE, $crudEvent);
     return $responseHandler->getResponse($this->options['response_type'], $event->getView(), $this->getTemplate(), $paramsEvent->getParams());
 }
Exemple #2
0
 /**
  * {@inheritdoc}
  */
 public function call(ActionEvent $event, string $format) : Response
 {
     $controller = $event->getController();
     $dataProvider = $event->getDataProvider();
     $request = $event->getRequest();
     if ($id = $request->get('id')) {
         $data = $dataProvider->get($id);
         $this->checkRole($controller, $data);
     } else {
         $data = $dataProvider->create();
         $this->checkRole($controller);
     }
     $formProvider = $controller->get('vardius_crud.form.provider');
     $form = $formProvider->createForm($event->getFormType(), $data, ['method' => $request->getMethod()]);
     $source = $dataProvider->getSource();
     $crudEvent = new CrudEvent($source, $controller, $form);
     $dispatcher = $controller->get('event_dispatcher');
     $dispatcher->dispatch(CrudEvents::CRUD_PRE_SAVE, $crudEvent);
     $responseHandler = $controller->get('vardius_crud.response.handler');
     if (in_array($request->getMethod(), ['POST', 'PUT'])) {
         $form->handleRequest($request);
         if ($form->isValid()) {
             if ($data->getId()) {
                 $dispatcher->dispatch(CrudEvents::CRUD_PRE_UPDATE, $crudEvent);
                 $dataProvider->update($data);
                 $dispatcher->dispatch(CrudEvents::CRUD_POST_UPDATE, $crudEvent);
             } else {
                 $dispatcher->dispatch(CrudEvents::CRUD_PRE_CREATE, $crudEvent);
                 $dataProvider->add($data);
                 $dispatcher->dispatch(CrudEvents::CRUD_POST_CREATE, $crudEvent);
             }
             $dispatcher->dispatch(CrudEvents::CRUD_POST_SAVE, $crudEvent);
             if ($format === 'html') {
                 $routeName = rtrim(rtrim($request->get('_route'), 'edit'), 'add') . 'show';
                 if (!$controller->get('router')->getRouteCollection()->get($routeName)) {
                     $routeName = rtrim($routeName, 'show') . 'list';
                 }
                 if (!$controller->get('router')->getRouteCollection()->get($routeName)) {
                     /** @var Session $session */
                     $session = $request->getSession();
                     /** @var FlashBagInterface $flashBag */
                     $flashBag = $session->getFlashBag();
                     $flashBag->add('success', 'save.success');
                     return $controller->redirect($responseHandler->getRefererUrl($controller, $request, ['id' => $data->getId()]));
                 }
                 return $controller->redirect($controller->generateUrl($routeName, ['id' => $data->getId()]));
             } else {
                 return $responseHandler->getResponse($format, '', '', $data, self::ACTION_CODE, [], ['groups' => ['update']]);
             }
         } elseif ($format === 'json') {
             $formErrorHandler = $controller->get('vardius_crud.form.error_handler');
             return new JsonResponse(['message' => 'Invalid form data', 'errors' => $formErrorHandler->getErrorMessages($form)], 400);
         }
     }
     $params = $data;
     if ($format === 'html') {
         $params = array_merge($params, ['form' => $form->createView()]);
     }
     $paramsEvent = new ResponseEvent($params);
     $crudEvent = new CrudEvent($source, $controller, $paramsEvent);
     $dispatcher->dispatch(CrudEvents::CRUD_SAVE, $crudEvent);
     return $responseHandler->getResponse($format, $event->getView(), $this->getTemplate(), $paramsEvent->getParams(), 200, [], ['groups' => ['update']]);
 }