Commit d74cb1f9 authored by Fabien Potencier's avatar Fabien Potencier

Merge branch '1.2'

* 1.2:
  fixed CS
  Update session.rst
  updated docs and changelog
  Add  parameter for application middlewares (before, after, finish)
  updated docs and changelog
  allow to register form types without extensions

Conflicts:
	src/Silex/Provider/FormServiceProvider.php
	tests/Silex/Tests/Provider/FormServiceProviderTest.php
parents 8de8331e 81a08269
......@@ -12,7 +12,8 @@ Changelog
1.2.2 (2014-XX-XX)
------------------
* n/a
* added support for the $app argument in application middlewares (to make it consistent with route middlewares)
* added form.types to the Form provider
1.2.1 (2014-07-01)
------------------
......
......@@ -20,7 +20,7 @@ Before Middleware
A *before* application middleware allows you to tweak the Request before the
controller is executed::
$app->before(function (Request $request) {
$app->before(function (Request $request, Application $app) {
// ...
});
......@@ -30,7 +30,7 @@ If you want your middleware to be run even if an exception is thrown early on
(on a 404 or 403 error for instance), then, you need to register it as an
early event::
$app->before(function (Request $request) {
$app->before(function (Request $request, Application $app) {
// ...
}, Application::EARLY_EVENT);
......
......@@ -172,6 +172,14 @@ form by adding constraints on the fields::
))
->getForm();
You can register form types by extending ``form.types``::
$app['form.types'] = $app->share($app->extend('form.types', function ($types) use ($app) {
$types[] = new YourFormType();
return $types;
}));
You can register form extensions by extending ``form.extensions``::
$app->extend('form.extensions', function ($extensions) use ($app) {
......
......@@ -26,8 +26,8 @@ Parameters
* **cookie_secure**: Cookie secure (HTTPS)
* **cookie_httponly**: Whether the cookie is http only
However, all of these are optional. Sessions last as long as the browser is
open. To override this, set the ``lifetime`` option.
However, all of these are optional. Default Sessions life time is 1800
seconds (30 minutes). To override this, set the ``lifetime`` option.
For a full list of available options, read the `PHP
<http://php.net/session.configuration>`_ official documentation.
......
......@@ -294,7 +294,7 @@ class Application extends Container implements HttpKernelInterface, TerminableIn
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);
......@@ -320,7 +320,7 @@ class Application extends Container implements HttpKernelInterface, TerminableIn
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);
}
......@@ -338,7 +338,7 @@ class Application extends Container implements HttpKernelInterface, TerminableIn
$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);
}
......
......@@ -47,6 +47,10 @@ class FormServiceProvider implements ServiceProviderInterface
$app['form.secret'] = md5(__DIR__);
$app['form.types'] = function ($app) {
return array();
};
$app['form.type.extensions'] = function ($app) {
return array();
};
......@@ -84,6 +88,7 @@ class FormServiceProvider implements ServiceProviderInterface
$app['form.factory'] = function ($app) {
return Forms::createFormFactoryBuilder()
->addExtensions($app['form.extensions'])
->addTypes($app['form.types'])
->addTypeExtensions($app['form.type.extensions'])
->addTypeGuessers($app['form.type.guessers'])
->setResolvedTypeFactory($app['form.resolved_type_factory'])
......
......@@ -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);
}
}
......@@ -14,6 +14,7 @@ namespace Silex\Tests\Provider;
use Silex\Application;
use Silex\Provider\FormServiceProvider;
use Silex\Provider\TranslationServiceProvider;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
use Symfony\Component\Form\FormTypeGuesserChain;
......@@ -29,6 +30,25 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
$this->assertInstanceOf('Symfony\Component\Form\FormFactory', $app['form.factory']);
}
public function testFormServiceProviderWillLoadTypes()
{
$app = new Application();
$app->register(new FormServiceProvider());
$app->extend('form.types', function ($extensions) {
$extensions[] = new DummyFormType();
return $extensions;
});
$form = $app['form.factory']->createBuilder('form', array())
->add('dummy', 'dummy')
->getForm();
$this->assertInstanceOf('Symfony\Component\Form\Form', $form);
}
public function testFormServiceProviderWillLoadTypeExtensions()
{
$app = new Application();
......@@ -73,8 +93,8 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
'messages' => array(
'de' => array (
'The CSRF token is invalid. Please try to resubmit the form.' => 'German translation',
)
)
),
),
);
$app['locale'] = 'de';
......@@ -86,7 +106,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
->getForm();
$form->handleRequest($req = Request::create('/', 'POST', array('form' => array(
'_token' => 'the wrong token'
'_token' => 'the wrong token',
))));
$this->assertFalse($form->isValid());
......@@ -94,6 +114,17 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
}
}
class DummyFormType extends AbstractType
{
/**
* @return string The name of this type
*/
public function getName()
{
return 'dummy';
}
}
class DummyFormTypeExtension extends AbstractTypeExtension
{
public function getExtendedType()
......
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