/** * {@inheritDoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder->addViewTransformer(new FileTransformer($this->container->getParameter('sf.web_assets_dir'))); $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($options) { // respond to the event, modify data, or form elements $data = $event->getData(); $object = $event->getForm()->getParent()->getData(); if (!$object) { return; } $crop = null; if (isset($options['img_config'])) { $crop = $data['crop']; $data = $data['url']; } $admin = $this->container->get('sf.admin.loader')->getAdminByClass($options['sf_admin_class']); $oldValue = $admin->getReflectionProperty($options['sf_admin_property'])->getValue($object); $pattern = \Symforce\AdminBundle\Entity\File::getFilesPattern($this->container->getParameter('sf.web_assets_dir')); if ($data && preg_match($pattern, $data, $ls)) { $em = $admin->getManager(); $file = $em->getRepository('Symforce\\AdminBundle\\Entity\\File')->loadByUUID($ls[1]); $object_id = $admin->getId($object); if ($object_id) { $file->setEntityId($object_id); } if ($crop) { $this->container->get('sf.admin.imagine')->resize($file, $crop, $options['img_config']); } if ($file->getSessionId()) { if ($oldValue) { $em->remove($oldValue); } $file->setIsHtmlFile(false); $file->setSessionId(null); $em->persist($file); $event->setData($file); } else { $event->setData($file); } } else { $event->setData(null); } }); $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use($options) { if (isset($options['required']) && $options['required']) { $data = $event->getData(); $form = $event->getForm(); if (empty($data['url'])) { $error = $this->container->get('translator')->trans('form.file.required', array('%field%' => isset($options['label']) ? $options['label'] : $form->getName())); $form->addError(new \Symfony\Component\Form\FormError($error)); } } }); }