protected function buildFormReferer(\Symfony\Component\HttpFoundation\Request $request, \Symfony\Component\Form\FormBuilder $builder, $object, $url = null) { $matcher = $this->admin->getService('router_default')->getMatcher(); $baseUrl = $request->getBaseUrl(); $referer = parse_url($request->headers->get('referer')); $referer_url = $referer['path']; if (strlen($baseUrl) > 1 && substr($referer['path'], 0, strlen($baseUrl)) == $baseUrl) { $referer_url = substr($referer['path'], strlen($baseUrl)); } if ($referer_url === $referer['path']) { $baseUrl = null; } $referer_parameters = null; try { $referer_parameters = $matcher->match($referer_url); } catch (\Symfony\Component\Routing\Exception\ResourceNotFoundException $e) { } $parameters = $matcher->match($request->getPathInfo()); if (!$referer_parameters || $parameters['_route'] !== $referer_parameters['_route']) { $url = $referer['path'] . (isset($referer['query']) ? '?' . $referer['query'] : ''); } $builder->add('sf_admin_form_referer', 'sf_referer', array('referer_url_default' => $url, 'referer_url_route' => $parameters['_route'], 'referer_url_request' => $request, 'referer_url_matcher' => $matcher, 'referer_base_url' => $baseUrl)); $builder->add('sf_admin_form_dynamic', 'sf_dynamic', array()); if ($this->admin_loader->getContainer()->getParameter('kernel.debug')) { $builder->add('sf_admin_form_debug', 'choice', array('label' => 'Debug', 'mapped' => false, 'expanded' => true, 'data' => 0, 'widget_type' => 'inline', 'choices' => array('1' => 'Yes', '0' => 'No'))); } }
public function generate() { /** * @var \Doctrine\Common\Annotations\FileCacheReader */ $reader = $this->admin->getService('annotation_reader'); if ($this->controller) { $rc = new \ReflectionClass($this->controller); foreach ($rc->getMethods() as $m) { if ($m instanceof \ReflectionMethod) { if ($m->isAbstract() || $m->isAbstract() || $m->isConstructor() || $m->isDestructor() || $m->isStatic()) { continue; } $_as = $reader->getMethodAnnotations($m); $as = array(); foreach ($_as as $annot) { $_class = get_class($annot); if (isset($as[$_class])) { if (is_array($as[$_class])) { $as[$_class][] = $annot; } else { $as[$_class] = array($as[$_class], $annot); } } else { $as[$_class] = $annot; } } if (!isset($as[self::ROUTE_ANNOT_CLASS])) { continue; } if (isset($as[self::SYMFONY_ROUTE_ANNOT_CLASS])) { throw new \Exception(sprintf("%s (AdminRoute, SymfonyRoute) duplicate ", $this->err_msg)); } $annot = $as[self::ROUTE_ANNOT_CLASS]; if ($this->addRoute($m, $annot, $as)) { $this->page_loader->addFileResource($rc->getFileName()); } } } } }