Skip to content

Commit

Permalink
bug silexphp#1360 Registering the silex form extension last to ensure…
Browse files Browse the repository at this point in the history
… user specified ex… (skalpa)

This PR was merged into the 2.0.x-dev branch.

Discussion
----------

Registering the silex form extension last to ensure user specified ex…

…tensions can modify the behavior of the CSRF and Validator extensions.

Fixes silexphp#1358

Commits
-------

c21798c Registering the silex form extension last to ensure user specified extensions can modify the behavior of the CSRF and Validator extensions.
  • Loading branch information
fabpot committed May 18, 2016
2 parents 7a20e74 + c21798c commit 42bda7b
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/Silex/Provider/FormServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ public function register(Container $app)

$app['form.extensions'] = function ($app) {
$extensions = array(
$app['form.extension.silex'],
new HttpFoundationExtension(),
);

Expand All @@ -80,6 +79,7 @@ public function register(Container $app)
if (isset($app['validator'])) {
$extensions[] = new FormValidatorExtension($app['validator']);
}
$extensions[] = $app['form.extension.silex'];

return $extensions;
};
Expand Down
18 changes: 18 additions & 0 deletions tests/Silex/Tests/Provider/FormServiceProviderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,24 @@ public function testFormCsrf()

$this->assertTrue(isset($form->createView()['_token']));
}

public function testUserExtensionCanConfigureDefaultExtensions()
{
$app = new Application();
$app->register(new FormServiceProvider());
$app->register(new SessionServiceProvider());
$app->register(new CsrfServiceProvider());
$app['session.test'] = true;

$app->extend('form.type.extensions', function ($extensions) {
$extensions[] = new FormServiceProviderTest\DisableCsrfExtension();

return $extensions;
});
$form = $app['form.factory']->createBuilder('Symfony\Component\Form\Extension\Core\Type\FormType', array())->getForm();

$this->assertFalse($form->getConfig()->getOption('csrf_protection'));
}
}

if (!class_exists('Symfony\Component\Form\Deprecated\FormEvents')) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Silex\Tests\Provider\FormServiceProviderTest;

use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class DisableCsrfExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'csrf_protection' => false,
));
}

public function getExtendedType()
{
return FormType::class;
}
}

0 comments on commit 42bda7b

Please sign in to comment.