/** * Modifies the ParamConverterManager instance. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $configurations = array(); if ($configuration = $request->attributes->get('_converters')) { foreach (is_array($configuration) ? $configuration : array($configuration) as $configuration) { $configurations[$configuration->getName()] = $configuration; } } if (is_array($controller)) { $r = new \ReflectionMethod($controller[0], $controller[1]); } else { $r = new \ReflectionFunction($controller); } // automatically apply conversion for non-configured objects foreach ($r->getParameters() as $param) { if (!$param->getClass() || $param->getClass()->isInstance($request)) { continue; } $name = $param->getName(); if (!isset($configurations[$name])) { $configuration = new ParamConverter(array()); $configuration->setName($name); $configuration->setClass($param->getClass()->getName()); $configurations[$name] = $configuration; } elseif (null === $configurations[$name]->getClass()) { $configurations[$name]->setClass($param->getClass()->getName()); } $configurations[$name]->setIsOptional($param->isOptional()); } $this->manager->apply($request, $configurations); }
/** * Modifies the ParamConverterManager instance. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onCoreController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $configurations = array(); if ($configuration = $request->attributes->get('_converters')) { $configurations = is_array($configuration) ? $configuration : array($configuration); } if (is_array($controller)) { $r = new \ReflectionMethod($controller[0], $controller[1]); } else { $r = new \ReflectionFunction($controller); } // automatically apply conversion for non-configured objects foreach ($r->getParameters() as $param) { if ($param->getClass() && !$request->attributes->get($param->getName())) { $configuration = new ParamConverter(array()); $configuration->setName($param->getName()); $configuration->setClass($param->getClass()->getName()); $configuration->setIsOptional($param->isOptional()); $configurations[] = $configuration; } } $this->manager->apply($request, $configurations); }
public function register(Container $c) { $c['extra.paramconverter.auto_convert'] = true; $c['extra.paramconverter.manager'] = function ($c) { $converterManager = new ParamConverterManager(); if (isset($c['doctrine.registry'])) { $converterManager->add(new DoctrineParamConverter($c['doctrine.registry']), 10, 'doctrine.orm'); } $converterManager->add(new DateTimeParamConverter(), -5, 'datetime'); return $converterManager; }; $c['extra.controller_listener'] = function ($c) { return new ControllerListener($c['annotation.reader']); }; $c['extra.paramconverter_listener'] = function ($c) { return new ParamConverterListener($c['extra.paramconverter.manager'], $c['extra.paramconverter.auto_convert']); }; $c['extra.httpcache_listener'] = function () { return new HttpCacheListener(); }; $c['extra.security.expression_language'] = function () { return new ExpressionLanguage(); }; $c['extra.security_listener'] = function ($c) { return new SecurityListener(isset($c['security.context']) ? $c['security.context'] : null, $c['extra.security.expression_language'], isset($c['security.authentication.trust_resolver']) ? $c['security.authentication.trust_resolver'] : null, isset($c['security.role_hierarchy']) ? $c['security.role_hierarchy'] : null); }; }
/** * Modifies the ParamConverterManager instance. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onKernelController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $configurations = array(); if ($configuration = $request->attributes->get('_converters')) { foreach (is_array($configuration) ? $configuration : array($configuration) as $configuration) { $configurations[$configuration->getName()] = $configuration; } } if (is_array($controller)) { $r = new \ReflectionMethod($controller[0], $controller[1]); } else { $r = new \ReflectionFunction($controller); } // automatically apply conversion for non-configured objects if ($this->autoConvert) { $configurations = $this->autoConfigure($r, $request, $configurations); } $this->manager->apply($request, $configurations); }
/** * Modifies the ParamConverterManager instance. * * @param FilterControllerEvent $event A FilterControllerEvent instance */ public function onCoreController(FilterControllerEvent $event) { $controller = $event->getController(); $request = $event->getRequest(); $configurations = array(); if ($configuration = $request->attributes->get('_converters')) { foreach (is_array($configuration) ? $configuration : array($configuration) as $configuration) { $configurations[$configuration->getName()] = $configuration; } } if (is_array($controller)) { $r = new \ReflectionMethod($controller[0], $controller[1]); } else { $r = new \ReflectionFunction($controller); } // automatically apply conversion for non-configured objects foreach ($r->getParameters() as $param) { if (!$param->getClass()) { continue; } $name = $param->getName(); // the parameter is already set, so disable the conversion if ($request->attributes->has($name)) { unset($configurations[$name]); } else { if (isset($configurations[$name])) { $configuration = $configurations[$name]; } else { $configuration = new ParamConverter(array()); $configuration->setName($name); $configuration->setClass($param->getClass()->getName()); } $configuration->setIsOptional($param->isOptional()); $configurations[$name] = $configuration; } } $this->manager->apply($request, array_values($configurations)); }
public function register(Container $app) { if (!isset($app['routing.loader.resolver'])) { throw new \LogicException('You must register the RoutingServiceProvider to use the SensioFrameworkExtraServiceProvider.'); } if (!isset($app['annotations'])) { throw new \LogicException('You must register the AnnotationsServiceProvider to use the SensioFrameworkExtraServiceProvider.'); } if (!isset($app['templating'])) { throw new \LogicException('You must register the TemplatingServiceProvider to use the SensioFrameworkExtraServiceProvider.'); } $app['sensio_framework_extra.routing.loader.annot_dir'] = function (Container $app) { return new AnnotationDirectoryLoader(new FileLocator(), $app['sensio_framework_extra.routing.loader.annot_class']); }; $app['sensio_framework_extra.routing.loader.annot_file'] = function (Container $app) { return new AnnotationFileLoader(new FileLocator(), $app['sensio_framework_extra.routing.loader.annot_class']); }; $app['sensio_framework_extra.routing.loader.annot_class'] = function (Container $app) { return new AnnotatedRouteControllerLoader($app['annotations']); }; // listeners $app['sensio_framework_extra.controller.listener'] = function (Container $app) { return new ControllerListener($app['annotations']); }; $app['sensio_framework_extra.cache.listener'] = function () { return new HttpCacheListener(); }; $app['sensio_framework_extra.security.listener'] = function (Container $app) { $getOr = function ($name, $notfound = null) use($app) { return isset($app[$name]) ? $app[$name] : $notfound; }; return new SecurityListener(null, $app['sensio_framework_extra.security.expression_language'], $getOr('security.trust_resolver'), new RoleHierarchy($getOr('security.role_hierarchy', [])), $getOr('security.token_storage'), $getOr('security.authorization_checker')); }; $app['sensio_framework_extra.view.listener'] = function (Container $app) { return new TemplateListener($app['templating'], new TemplateGuesser()); }; $app['sensio_framework_extra.converter.listener'] = function (Container $app) { return new ParamConverterListener($app['sensio_framework_extra.converter.manager'], true); }; $app['sensio_framework_extra.psr7.listener.response'] = function (Container $app) { return new PsrResponseListener($app['sensio_framework_extra.psr7.http_foundation_factory']); }; $app['sensio_framework_extra.security.expression_language'] = function () { return new ExpressionLanguage(); }; $app['sensio_framework_extra.converter.manager'] = function (Container $app) { $manager = new ParamConverterManager(); $manager->add($app['sensio_framework_extra.converter.datetime']); if (class_exists('Symfony\\Bridge\\PsrHttpMessage\\Factory\\HttpFoundationFactory')) { $manager->add($app['sensio_framework_extra.psr7.converter.server_request']); } if (isset($app['doctrine'])) { $manager->add($app['sensio_framework_extra.converter.doctrine.orm']); } return $manager; }; $app['sensio_framework_extra.psr7.http_message_factory'] = function () { return new DiactorosFactory(); }; $app['sensio_framework_extra.psr7.http_foundation_factory'] = function () { return new HttpFoundationFactory(); }; $app['sensio_framework_extra.psr7.converter.server_request'] = function (Container $app) { return new PsrServerRequestParamConverter($app['sensio_framework_extra.psr7.http_message_factory']); }; $app['sensio_framework_extra.converter.doctrine.orm'] = function (Container $app) { return new DoctrineParamConverter($app['doctrine']); }; $app['sensio_framework_extra.converter.datetime'] = function () { return new DateTimeParamConverter(); }; $app['routing.loader.resolver'] = $app->extend('routing.loader.resolver', function (LoaderResolverInterface $resolver, Container $app) { $resolver->addLoader($app['sensio_framework_extra.routing.loader.annot_dir']); $resolver->addLoader($app['sensio_framework_extra.routing.loader.annot_file']); $resolver->addLoader($app['sensio_framework_extra.routing.loader.annot_class']); return $resolver; }); }
public function testApplyNotCalledOnAlreadyConvertedObjects() { $converter = $this->createParamConverterMock(); $converter->expects($this->never())->method('supports'); $converter->expects($this->never())->method('apply'); $request = new Request(); $request->attributes->set('converted', new \stdClass()); $configuration = new Configuration\ParamConverter(array('name' => 'converted', 'class' => 'stdClass')); $manager = new ParamConverterManager(); $manager->add($converter); $manager->apply($request, array($configuration)); }