Commit 397190d3 authored by Fabien Potencier's avatar Fabien Potencier

moved internal store of middlewares from route defaults to route options

parent fa9c82e9
......@@ -109,14 +109,20 @@ class Application extends \Pimple implements HttpKernelInterface, EventSubscribe
});
$this['route_middlewares_trigger'] = $this->protect(function (KernelEvent $event) use ($app) {
foreach ($event->getRequest()->attributes->get('_middlewares', array()) as $callback) {
$ret = call_user_func($callback, $event->getRequest());
$request = $event->getRequest();
$routeName = $request->attributes->get('_route');
if (!$route = $app['routes']->get($routeName)) {
return;
}
foreach ((array) $route->getOption('_middlewares') as $callback) {
$ret = call_user_func($callback, $request);
if ($ret instanceof Response) {
$event->setResponse($ret);
return;
} elseif (null !== $ret) {
throw new \RuntimeException(sprintf('Middleware for route "%s" returned an invalid response value. Must return null or an instance of Response.', $event->getRequest()->attributes->get('_route')));
throw new \RuntimeException(sprintf('Middleware for route "%s" returned an invalid response value. Must return null or an instance of Response.', $routeName));
}
}
});
......
......@@ -12,7 +12,6 @@
namespace Silex;
use Silex\Exception\ControllerFrozenException;
use Symfony\Component\Routing\Route;
/**
......@@ -169,9 +168,9 @@ class Controller
*/
public function middleware($callback)
{
$middlewareCallbacks = $this->route->getDefault('_middlewares');
$middlewareCallbacks = $this->route->getOption('_middlewares');
$middlewareCallbacks[] = $callback;
$this->route->setDefault('_middlewares', $middlewareCallbacks);
$this->route->setOption('_middlewares', $middlewareCallbacks);
return $this;
}
......
......@@ -158,9 +158,9 @@ class RouterTest extends \PHPUnit_Framework_TestCase
});
foreach (array('/foo', '/bar') as $path) {
$request = Request::create($path);
$response = $app->handle($request);
$this->assertContains($path, $response->getContent());
$request = Request::create($path);
$response = $app->handle($request);
$this->assertContains($path, $response->getContent());
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment