Commit 0e5f4899 authored by Dominik Zogg's avatar Dominik Zogg Committed by Fabien Potencier

allow to register form types without extensions

parent 73652ba0
......@@ -47,6 +47,10 @@ class FormServiceProvider implements ServiceProviderInterface
$app['form.secret'] = md5(__DIR__);
$app['form.types'] = $app->share(function ($app) {
return array();
});
$app['form.type.extensions'] = $app->share(function ($app) {
return array();
});
......@@ -84,6 +88,7 @@ class FormServiceProvider implements ServiceProviderInterface
$app['form.factory'] = $app->share(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'])
......
......@@ -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,13 +30,32 @@ 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['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()
{
$app = new Application();
$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();
return $extensions;
......@@ -54,7 +74,7 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
$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());
return $guessers;
......@@ -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