Commit 5aabb465 authored by Fabien Potencier's avatar Fabien Potencier

feature #1007 Add $app parameter for application middlewares (before, after, finish) (kl3ryk)

This PR was submitted for the master branch but it was merged into the 1.2 branch instead (closes #1007).

Discussion
----------

Add $app parameter for application middlewares (before, after, finish)

There is small inconsistence between route and application middlewares.

Route middlewares (http://silex.sensiolabs.org/doc/middlewares.html#route-middlewares) can have $app parameter, but application middlewares (http://silex.sensiolabs.org/doc/middlewares.html#application-middlewares) has this parameter missing.

Commits
-------

38a3c465 Add  parameter for application middlewares (before, after, finish)
parents a7a3aea6 38a3c465
......@@ -313,7 +313,7 @@ class Application extends \Pimple implements HttpKernelInterface, TerminableInte
return;
}
$ret = call_user_func($app['callback_resolver']->resolveCallback($callback), $event->getRequest());
$ret = call_user_func($app['callback_resolver']->resolveCallback($callback), $event->getRequest(), $app);
if ($ret instanceof Response) {
$event->setResponse($ret);
......@@ -339,7 +339,7 @@ class Application extends \Pimple implements HttpKernelInterface, TerminableInte
return;
}
call_user_func($app['callback_resolver']->resolveCallback($callback), $event->getRequest(), $event->getResponse());
call_user_func($app['callback_resolver']->resolveCallback($callback), $event->getRequest(), $event->getResponse(), $app);
}, $priority);
}
......@@ -357,7 +357,7 @@ class Application extends \Pimple implements HttpKernelInterface, TerminableInte
$app = $this;
$this->on(KernelEvents::TERMINATE, function (PostResponseEvent $event) use ($callback, $app) {
call_user_func($app['callback_resolver']->resolveCallback($callback), $event->getRequest(), $event->getResponse());
call_user_func($app['callback_resolver']->resolveCallback($callback), $event->getRequest(), $event->getResponse(), $app);
}, $priority);
}
......
......@@ -233,4 +233,61 @@ class MiddlewareTest extends \PHPUnit_Framework_TestCase
$request = Request::create('/');
$this->assertEquals('foo---', $app->handle($request)->getContent());
}
public function testRouteAndApplicationMiddlewareParameterInjection()
{
$app = new Application();
$test = $this;
$middlewareTarget = array();
$applicationBeforeMiddleware = function ($request, $app) use (&$middlewareTarget, $test) {
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Request', $request);
$test->assertInstanceOf('\Silex\Application', $app);
$middlewareTarget[] = 'application_before_middleware_triggered';
};
$applicationAfterMiddleware = function ($request, $response, $app) use (&$middlewareTarget, $test){
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Request', $request);
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $response);
$test->assertInstanceOf('\Silex\Application', $app);
$middlewareTarget[] = 'application_after_middleware_triggered';
};
$applicationFinishMiddleware = function ($request, $response, $app) use (&$middlewareTarget, $test){
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Request', $request);
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $response);
$test->assertInstanceOf('\Silex\Application', $app);
$middlewareTarget[] = 'application_finish_middleware_triggered';
};
$routeBeforeMiddleware = function ($request, $app) use (&$middlewareTarget, $test) {
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Request', $request);
$test->assertInstanceOf('\Silex\Application', $app);
$middlewareTarget[] = 'route_before_middleware_triggered';
};
$routeAfterMiddleware = function ($request, $response, $app) use (&$middlewareTarget, $test){
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Request', $request);
$test->assertInstanceOf('\Symfony\Component\HttpFoundation\Response', $response);
$test->assertInstanceOf('\Silex\Application', $app);
$middlewareTarget[] = 'route_after_middleware_triggered';
};
$app->before($applicationBeforeMiddleware);
$app->after($applicationAfterMiddleware);
$app->finish($applicationFinishMiddleware);
$app->match('/', function () {
return new Response('foo');
})
->before($routeBeforeMiddleware)
->after($routeAfterMiddleware);
$request = Request::create('/');
$response = $app->handle($request);
$app->terminate($request, $response);
$this->assertSame(array('application_before_middleware_triggered', 'route_before_middleware_triggered', 'route_after_middleware_triggered', 'application_after_middleware_triggered', 'application_finish_middleware_triggered'), $middlewareTarget);
}
}
\ No newline at end of file
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