Exemple #1
0
 /**
  * @expectedException BadFunctionCallException
  * @expectedExceptionMessage parameter "foo" expected by callback not available
  */
 public function testMissingParameterForCallback()
 {
     $m = new Route(array('GET'), '/foo', function ($foo) {
         return 'foo';
     });
     $m->executeCallback(array());
 }
 public function run(Request $request, Route $route)
 {
     // figure out which plugins to run
     $runPlugins = [];
     foreach ($this->defaultPlugins as $plugin) {
         $routeConfig = $route->getConfig(get_class($plugin));
         if (self::isEnabled($routeConfig, true)) {
             $runPlugins[] = $plugin;
         }
     }
     foreach ($this->optionalPlugins as $plugin) {
         $routeConfig = $route->getConfig(get_class($plugin));
         if (self::isEnabled($routeConfig, false)) {
             $runPlugins[] = $plugin;
         }
     }
     // run all plugins we need to run and keep all the objects they
     // return...
     $availableRouteCallbackParameters = [];
     foreach ($runPlugins as $plugin) {
         $routeConfig = $route->getConfig(get_class($plugin));
         $response = $plugin->execute($request, $routeConfig);
         if ($response instanceof Response) {
             // received Response from plugin, e.g. a RedirectResponse,
             // return this immediately
             return $response;
         } elseif (is_object($response)) {
             // if we get an object, just add it to the list of available
             // parameters for the callback
             $availableRouteCallbackParameters[get_class($response)] = $response;
             // we also add all the implemented interfaces there
             $reflectionClass = new ReflectionClass($response);
             $responseInterfaces = $reflectionClass->getInterfaceNames();
             foreach ($responseInterfaces as $interfaceName) {
                 $availableRouteCallbackParameters[$interfaceName] = $response;
             }
         }
     }
     return $availableRouteCallbackParameters;
 }