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 ...@@ -109,14 +109,20 @@ class Application extends \Pimple implements HttpKernelInterface, EventSubscribe
}); });
$this['route_middlewares_trigger'] = $this->protect(function (KernelEvent $event) use ($app) { $this['route_middlewares_trigger'] = $this->protect(function (KernelEvent $event) use ($app) {
foreach ($event->getRequest()->attributes->get('_middlewares', array()) as $callback) { $request = $event->getRequest();
$ret = call_user_func($callback, $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) { if ($ret instanceof Response) {
$event->setResponse($ret); $event->setResponse($ret);
return; return;
} elseif (null !== $ret) { } 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 @@ ...@@ -12,7 +12,6 @@
namespace Silex; namespace Silex;
use Silex\Exception\ControllerFrozenException; use Silex\Exception\ControllerFrozenException;
use Symfony\Component\Routing\Route; use Symfony\Component\Routing\Route;
/** /**
...@@ -169,9 +168,9 @@ class Controller ...@@ -169,9 +168,9 @@ class Controller
*/ */
public function middleware($callback) public function middleware($callback)
{ {
$middlewareCallbacks = $this->route->getDefault('_middlewares'); $middlewareCallbacks = $this->route->getOption('_middlewares');
$middlewareCallbacks[] = $callback; $middlewareCallbacks[] = $callback;
$this->route->setDefault('_middlewares', $middlewareCallbacks); $this->route->setOption('_middlewares', $middlewareCallbacks);
return $this; return $this;
} }
......
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