Exemplo n.º 1
0
 /**
  * @param FormBuilderInterface $builder
  * @param array $options
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $routes = $this->router->getRouteCollection();
     $nRoutes = array();
     foreach ($routes as $key => $route) {
         if (($dotPos = strpos($key, '.')) !== false) {
             $key = substr($key, 0, $dotPos);
         }
         $routeOptions = $route->getOptions();
         if (isset($routeOptions['label'])) {
             $nRoutes[$key] = $routeOptions['label'];
         }
     }
     asort($nRoutes);
     $formModifier = function (FormInterface $form, $link) {
         if ($link) {
             $form->add('parameters', ParameterType::class, array('link' => $link));
         }
     };
     $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($formModifier, $nRoutes) {
         $form = $event->getForm();
         $parentForm = $event->getForm()->getParent();
         $data = $event->getData();
         $parentData = $form->getParent()->getData();
         $getMethod = 'get' . ucfirst($form->getName());
         $entityLink = $data ? $parentData->{$getMethod}() : null;
         $name = isset($entityLink['name']) ? $entityLink['name'] : null;
         $externalLink = isset($entityLink['externalLink']) ? $entityLink['externalLink'] : null;
         $linkType = isset($entityLink['linkType']) ? $entityLink['linkType'] : true;
         $form->add('name', ChoiceType::class, array('data' => $name, 'empty_data' => 'Choose a link', 'choices' => $nRoutes, 'required' => false, 'attr' => array('class' => 'bigfoot_link_routes', 'data-parent-form-link' => $parentForm->getName())));
         $form->add('externalLink', TextType::class, array('data' => $externalLink, 'required' => false));
         $form->add('linkType', HiddenType::class, array('data' => $linkType, 'required' => false));
         if (isset($data['name'])) {
             $formModifier($event->getForm(), $data['name']);
         }
     });
     $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($formModifier) {
         $form = $event->getForm();
         $data = $event->getData();
         $parentData = $form->getParent()->getData();
         $setMethod = 'set' . ucfirst($form->getName());
         $parentData->{$setMethod}($data);
         if (isset($data['name'])) {
             $formModifier($event->getForm(), $data['name']);
         }
     });
 }
 /**
  * @param FormBuilderInterface $builder
  * @param array $options
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $link = $options['link'];
     if ($link) {
         $routeName = $this->router instanceof \BeSimple\I18nRoutingBundle\Routing\Router ? sprintf('%s.%s', $link, $this->locale) : $link;
         $route = $this->router->getRouteCollection()->get($routeName);
         if ($route) {
             $routeOptions = $route->getOptions();
         }
     }
     $entities = array();
     $parameters = array();
     if (isset($routeOptions['parameters'])) {
         foreach ($routeOptions['parameters'] as $key => $parameter) {
             if (preg_match('/Bundle/i', $parameter['type'])) {
                 $method = 'findBy';
                 if (isset($parameter['repoMethod'])) {
                     $method = $parameter['repoMethod'];
                 }
                 $methodParameters = array();
                 if (isset($parameter['label'])) {
                     $methodParameters[$parameter['label']] = 'ASC';
                 }
                 $entities[$parameter['name']] = $this->entityManager->getRepository($parameter['type'])->{$method}(array(), $methodParameters);
             } else {
                 $parameters[$parameter['name']] = $parameter['name'];
             }
         }
     }
     if (count($entities)) {
         foreach ($entities as $key => $entity) {
             $builder->add($key, ChoiceType::class, array('choices' => $this->getEntities($entity, $routeOptions)));
         }
     }
     if (count($parameters)) {
         foreach ($parameters as $key => $parameter) {
             $builder->add($parameter, TextType::class, array('required' => true));
         }
     }
 }
 /**
  * @expectedException Symfony\Component\Routing\Exception\MissingMandatoryParametersException
  */
 public function testGenerateI18nTranslatedWithoutLocale()
 {
     if (method_exists('Symfony\\Component\\Routing\\RouterInterface', 'getContext')) {
         $parentRouter = $this->getMock('Symfony\\Component\\Routing\\RouterInterface');
     } else {
         // use the Router for Symfony 2.0 as it implements the needed methods but they were not in the interface
         $parentRouter = $this->getMockBuilder('Symfony\\Component\\Routing\\Router')->disableOriginalConstructor()->getMock();
     }
     $context = $this->getMockBuilder('Symfony\\Component\\Routing\\RequestContext')->disableOriginalConstructor()->setMethods(array('getParameter', 'hasParameter'))->getMock();
     $context->expects($this->once())->method('hasParameter')->with($this->equalTo('_locale'))->will($this->returnValue(false));
     $parentRouter->expects($this->any())->method('getContext')->will($this->returnValue($context));
     $router = new Router($parentRouter);
     $router->generate('test_route', array('foo' => 'bar', 'translate' => 'foo'), false);
 }