Commit 43cd9450 authored by Fabien Potencier's avatar Fabien Potencier

feature #1018 allow to register form types without extensions (dominikzogg)

This PR was squashed before being merged into the 1.2 branch (closes #1018).

Discussion
----------

allow to register form types without extensions

Commits
-------

0e5f4899 allow to register form types without extensions
parents 73652ba0 0e5f4899
...@@ -47,6 +47,10 @@ class FormServiceProvider implements ServiceProviderInterface ...@@ -47,6 +47,10 @@ class FormServiceProvider implements ServiceProviderInterface
$app['form.secret'] = md5(__DIR__); $app['form.secret'] = md5(__DIR__);
$app['form.types'] = $app->share(function ($app) {
return array();
});
$app['form.type.extensions'] = $app->share(function ($app) { $app['form.type.extensions'] = $app->share(function ($app) {
return array(); return array();
}); });
...@@ -84,6 +88,7 @@ class FormServiceProvider implements ServiceProviderInterface ...@@ -84,6 +88,7 @@ class FormServiceProvider implements ServiceProviderInterface
$app['form.factory'] = $app->share(function ($app) { $app['form.factory'] = $app->share(function ($app) {
return Forms::createFormFactoryBuilder() return Forms::createFormFactoryBuilder()
->addExtensions($app['form.extensions']) ->addExtensions($app['form.extensions'])
->addTypes($app['form.types'])
->addTypeExtensions($app['form.type.extensions']) ->addTypeExtensions($app['form.type.extensions'])
->addTypeGuessers($app['form.type.guessers']) ->addTypeGuessers($app['form.type.guessers'])
->setResolvedTypeFactory($app['form.resolved_type_factory']) ->setResolvedTypeFactory($app['form.resolved_type_factory'])
......
...@@ -14,6 +14,7 @@ namespace Silex\Tests\Provider; ...@@ -14,6 +14,7 @@ namespace Silex\Tests\Provider;
use Silex\Application; use Silex\Application;
use Silex\Provider\FormServiceProvider; use Silex\Provider\FormServiceProvider;
use Silex\Provider\TranslationServiceProvider; use Silex\Provider\TranslationServiceProvider;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\AbstractTypeExtension; use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface; use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
use Symfony\Component\Form\FormTypeGuesserChain; use Symfony\Component\Form\FormTypeGuesserChain;
...@@ -29,13 +30,32 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -29,13 +30,32 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
$this->assertInstanceOf('Symfony\Component\Form\FormFactory', $app['form.factory']); $this->assertInstanceOf('Symfony\Component\Form\FormFactory', $app['form.factory']);
} }
public function testFormServiceProviderWillLoadTypes()
{
$app = new Application();
$app->register(new FormServiceProvider());
$app['form.types'] = $app->share($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() public function testFormServiceProviderWillLoadTypeExtensions()
{ {
$app = new Application(); $app = new Application();
$app->register(new FormServiceProvider()); $app->register(new FormServiceProvider());
$app['form.type.extensions'] = $app->share($app->extend('form.type.extensions', function($extensions) { $app['form.type.extensions'] = $app->share($app->extend('form.type.extensions', function ($extensions) {
$extensions[] = new DummyFormTypeExtension(); $extensions[] = new DummyFormTypeExtension();
return $extensions; return $extensions;
...@@ -54,7 +74,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -54,7 +74,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
$app->register(new FormServiceProvider()); $app->register(new FormServiceProvider());
$app['form.type.guessers'] = $app->share($app->extend('form.type.guessers', function($guessers) { $app['form.type.guessers'] = $app->share($app->extend('form.type.guessers', function ($guessers) {
$guessers[] = new FormTypeGuesserChain(array()); $guessers[] = new FormTypeGuesserChain(array());
return $guessers; return $guessers;
...@@ -73,8 +93,8 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -73,8 +93,8 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
'messages' => array( 'messages' => array(
'de' => array ( 'de' => array (
'The CSRF token is invalid. Please try to resubmit the form.' => 'German translation', 'The CSRF token is invalid. Please try to resubmit the form.' => 'German translation',
) ),
) ),
); );
$app['locale'] = 'de'; $app['locale'] = 'de';
...@@ -86,7 +106,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -86,7 +106,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
->getForm(); ->getForm();
$form->handleRequest($req = Request::create('/', 'POST', array('form' => array( $form->handleRequest($req = Request::create('/', 'POST', array('form' => array(
'_token' => 'the wrong token' '_token' => 'the wrong token',
)))); ))));
$this->assertFalse($form->isValid()); $this->assertFalse($form->isValid());
...@@ -94,6 +114,17 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -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 class DummyFormTypeExtension extends AbstractTypeExtension
{ {
public function getExtendedType() 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