Commit 3af0b910 authored by Fabien Potencier's avatar Fabien Potencier

fixed Symfony Form Component deprecations

parent 1c7dd57d
...@@ -20,6 +20,9 @@ use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension; ...@@ -20,6 +20,9 @@ use Symfony\Component\Form\Extension\HttpFoundation\HttpFoundationExtension;
use Symfony\Component\Form\Extension\Validator\ValidatorExtension as FormValidatorExtension; use Symfony\Component\Form\Extension\Validator\ValidatorExtension as FormValidatorExtension;
use Symfony\Component\Form\Forms; use Symfony\Component\Form\Forms;
use Symfony\Component\Form\ResolvedFormTypeFactory; use Symfony\Component\Form\ResolvedFormTypeFactory;
use Symfony\Component\Security\Csrf\CsrfTokenManager;
use Symfony\Component\Security\Csrf\TokenStorage\NativeSessionTokenStorage;
use Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage;
/** /**
* Symfony Form component Provider. * Symfony Form component Provider.
...@@ -104,11 +107,19 @@ class FormServiceProvider implements ServiceProviderInterface ...@@ -104,11 +107,19 @@ class FormServiceProvider implements ServiceProviderInterface
}); });
$app['form.csrf_provider'] = $app->share(function ($app) { $app['form.csrf_provider'] = $app->share(function ($app) {
if (isset($app['session'])) { if (!class_exists('Symfony\Component\Form\Extension\DataCollector\DataCollectorExtension')) {
return new SessionCsrfProvider($app['session'], $app['form.secret']); // Symfony 2.3
} if (isset($app['session'])) {
return new SessionCsrfProvider($app['session'], $app['form.secret']);
}
return new DefaultCsrfProvider($app['form.secret']); return new DefaultCsrfProvider($app['form.secret']);
} else {
// Symfony 2.4+
$storage = isset($app['session']) ? new SessionTokenStorage($app['session']) : new NativeSessionTokenStorage();
return new CsrfTokenManager(null, $storage);
}
}); });
} }
......
...@@ -20,8 +20,11 @@ use Symfony\Component\Form\AbstractTypeExtension; ...@@ -20,8 +20,11 @@ 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;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Translation\Exception\NotFoundResourceException; use Symfony\Component\Translation\Exception\NotFoundResourceException;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
class FormServiceProviderTest extends \PHPUnit_Framework_TestCase class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
{ {
...@@ -112,7 +115,13 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -112,7 +115,13 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
)))); ))));
$this->assertFalse($form->isValid()); $this->assertFalse($form->isValid());
$this->assertContains('ERROR: German translation', $form->getErrorsAsString()); $r = new \ReflectionMethod($form, 'getErrors');
if (!$r->getNumberOfParameters()) {
$this->assertContains('ERROR: German translation', $form->getErrorsAsString());
} else {
// as of 2.5
$this->assertContains('ERROR: German translation', (string) $form->getErrors(true, false));
}
} }
public function testFormServiceProviderWillNotAddNonexistentTranslationFiles() public function testFormServiceProviderWillNotAddNonexistentTranslationFiles()
...@@ -149,28 +158,72 @@ class DummyFormType extends AbstractType ...@@ -149,28 +158,72 @@ class DummyFormType extends AbstractType
} }
} }
class DummyFormTypeExtension extends AbstractTypeExtension if (method_exists('Symfony\Component\Form\AbstractType', 'configureOptions')) {
{ class DummyFormTypeExtension extends AbstractTypeExtension
public function getExtendedType()
{ {
return 'file'; public function getExtendedType()
} {
return 'file';
}
public function setDefaultOptions(OptionsResolverInterface $resolver) public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefined(array('image_path'));
}
}
} else {
class DummyFormTypeExtension extends AbstractTypeExtension
{ {
$resolver->setOptional(array('image_path')); public function getExtendedType()
{
return 'file';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
if (!method_exists($resolver, 'setDefined')) {
$resolver->setOptional(array('image_path'));
} else {
$resolver->setDefined(array('image_path'));
}
}
} }
} }
class FakeCsrfProvider implements CsrfProviderInterface if (!class_exists('Symfony\Component\Form\Extension\DataCollector\DataCollectorExtension')) {
{ // Symfony 2.3 only
public function generateCsrfToken($intention) class FakeCsrfProvider implements CsrfProviderInterface
{ {
return $intention.'123'; public function generateCsrfToken($intention)
} {
return $intention.'123';
}
public function isCsrfTokenValid($intention, $token) public function isCsrfTokenValid($intention, $token)
{
return $token === $this->generateCsrfToken($intention);
}
}
} else {
class FakeCsrfProvider implements CsrfTokenManagerInterface
{ {
return $token === $this->generateCsrfToken($intention); public function getToken($tokenId)
{
return new CsrfToken($tokenId, '123');
}
public function refreshToken($tokenId)
{
return new CsrfToken($tokenId, '123');
}
public function removeToken($tokenId)
{
}
public function isTokenValid(CsrfToken $token)
{
return '123' === $token->getValue();
}
} }
} }
...@@ -98,7 +98,7 @@ class ValidatorServiceProviderTest extends \PHPUnit_Framework_TestCase ...@@ -98,7 +98,7 @@ class ValidatorServiceProviderTest extends \PHPUnit_Framework_TestCase
->getForm() ->getForm()
; ;
$form->bind(array('email' => $email)); $form->submit(array('email' => $email));
$this->assertEquals($isValid, $form->isValid()); $this->assertEquals($isValid, $form->isValid());
$this->assertEquals($nbGlobalError, count($form->getErrors())); $this->assertEquals($nbGlobalError, count($form->getErrors()));
......
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