/** * 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); }
/** * Creates a new menu item from a simple name. The name is normalized and * translated with the specified translation domain. * * @param AdminInterface $admin used for translation * @param ItemInterface $menu will be modified and returned * @param string $name the source of the final label * @param string $translationDomain for label translation * @param array $options menu item options * * @return ItemInterface */ private function createMenuItem(AdminInterface $admin, ItemInterface $menu, $name, $translationDomain = null, $options = array()) { return $menu->addChild($admin->trans($admin->getLabelTranslatorStrategy()->getLabel($name, 'breadcrumb', 'link'), array(), $translationDomain), $options); }