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