/**
  * 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));
 }