/** * Create action. * * @param Request $request * * @return Response * * @throws AccessDeniedException If access is not granted */ public function createAction() { $request = $this->getRequest(); // the key used to lookup the template $templateKey = 'edit'; $this->admin->checkAccess('create'); $class = new \ReflectionClass($this->admin->hasActiveSubClass() ? $this->admin->getActiveSubClass() : $this->admin->getClass()); if ($class->isAbstract()) { return $this->render('SonataAdminBundle:CRUD:select_subclass.html.twig', array('base_template' => $this->getBaseTemplate(), 'admin' => $this->admin, 'action' => 'create'), null, $request); } $object = $this->admin->getNewInstance(); $preResponse = $this->preCreate($request, $object); if ($preResponse !== null) { return $preResponse; } $this->admin->setSubject($object); /** @var $form \Symfony\Component\Form\Form */ $form = $this->admin->getForm(); $form->setData($object); $form->handleRequest($request); if ($form->isSubmitted()) { //TODO: remove this check for 3.0 if (method_exists($this->admin, 'preValidate')) { $this->admin->preValidate($object); } $isFormValid = $form->isValid(); // persist if the form was valid and if in preview mode the preview was approved if ($isFormValid && (!$this->isInPreviewMode($request) || $this->isPreviewApproved($request))) { $this->admin->checkAccess('create', $object); try { $object = $this->admin->create($object); if ($this->isXmlHttpRequest()) { return $this->renderJson(array('result' => 'ok', 'objectId' => $this->admin->getNormalizedIdentifier($object)), 200, array()); } $this->addFlash('sonata_flash_success', $this->admin->trans('flash_create_success', array('%name%' => $this->escapeHtml($this->admin->toString($object))), 'SonataAdminBundle')); // redirect to edit mode return $this->redirectTo($object); } catch (ModelManagerException $e) { $this->handleModelManagerException($e); $isFormValid = false; } } // show an error message if the form failed validation if (!$isFormValid) { if (!$this->isXmlHttpRequest()) { $this->addFlash('sonata_flash_error', $this->admin->trans('flash_create_error', array('%name%' => $this->escapeHtml($this->admin->toString($object))), 'SonataAdminBundle')); } } elseif ($this->isPreviewRequested()) { // pick the preview template if the form was valid and preview was requested $templateKey = 'preview'; $this->admin->getShow(); } } $view = $form->createView(); // set the theme for the current Admin Form $this->get('twig')->getExtension('form')->renderer->setTheme($view, $this->admin->getFormTheme()); return $this->render($this->admin->getTemplate($templateKey), array('action' => 'create', 'form' => $view, 'object' => $object), null); }
/** * Create action * * @param Request $request * * @return Response * * @throws AccessDeniedException If access is not granted */ public function createAction(Request $request = null) { $request = $this->resolveRequest($request); // the key used to lookup the template $templateKey = 'edit'; if (false === $this->admin->isGranted('CREATE')) { throw new AccessDeniedException(); } $object = $this->admin->getNewInstance(); $this->admin->setSubject($object); /** @var $form \Symfony\Component\Form\Form */ $form = $this->admin->getForm(); $form->setData($object); if ($this->getRestMethod($request) == 'POST') { $form->submit($request); $isFormValid = $form->isValid(); // persist if the form was valid and if in preview mode the preview was approved if ($isFormValid && (!$this->isInPreviewMode($request) || $this->isPreviewApproved($request))) { if (false === $this->admin->isGranted('CREATE', $object)) { throw new AccessDeniedException(); } try { $object = $this->admin->create($object); if ($this->isXmlHttpRequest($request)) { return $this->renderJson(array('result' => 'ok', 'objectId' => $this->admin->getNormalizedIdentifier($object)), 200, array(), $request); } $this->addFlash('sonata_flash_success', $this->admin->trans('flash_create_success', array('%name%' => $this->escapeHtml($this->admin->toString($object))), 'SonataAdminBundle')); // redirect to edit mode return $this->redirectTo($object, $request); } catch (ModelManagerException $e) { $this->handleModelManagerException($e); $isFormValid = false; } } // show an error message if the form failed validation if (!$isFormValid) { if (!$this->isXmlHttpRequest($request)) { $this->addFlash('sonata_flash_error', $this->admin->trans('flash_create_error', array('%name%' => $this->escapeHtml($this->admin->toString($object))), 'SonataAdminBundle')); } } elseif ($this->isPreviewRequested($request)) { // pick the preview template if the form was valid and preview was requested $templateKey = 'preview'; $this->admin->getShow(); } } $view = $form->createView(); // set the theme for the current Admin Form $this->get('twig')->getExtension('form')->renderer->setTheme($view, $this->admin->getFormTheme()); return $this->render($this->admin->getTemplate($templateKey), array('action' => 'create', 'form' => $view, 'object' => $object), null, $request); }
/** * {@inheritdoc} */ public function preRemove(AdminInterface $admin, $object) { $this->create($this->getSubject(), 'sonata.admin.delete', array('target_text' => $admin->toString($object), 'admin_code' => $admin->getCode())); }