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 (!class_exists('Symfony\Component\Form\Extension\DataCollector\DataCollectorExtension')) {
// Symfony 2.3
if (isset($app['session'])) { if (isset($app['session'])) {
return new SessionCsrfProvider($app['session'], $app['form.secret']); 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());
$r = new \ReflectionMethod($form, 'getErrors');
if (!$r->getNumberOfParameters()) {
$this->assertContains('ERROR: German translation', $form->getErrorsAsString()); $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,8 +158,22 @@ class DummyFormType extends AbstractType ...@@ -149,8 +158,22 @@ 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 configureOptions(OptionsResolver $resolver)
{
$resolver->setDefined(array('image_path'));
}
}
} else {
class DummyFormTypeExtension extends AbstractTypeExtension
{
public function getExtendedType() public function getExtendedType()
{ {
return 'file'; return 'file';
...@@ -158,12 +181,19 @@ class DummyFormTypeExtension extends AbstractTypeExtension ...@@ -158,12 +181,19 @@ class DummyFormTypeExtension extends AbstractTypeExtension
public function setDefaultOptions(OptionsResolverInterface $resolver) public function setDefaultOptions(OptionsResolverInterface $resolver)
{ {
if (!method_exists($resolver, 'setDefined')) {
$resolver->setOptional(array('image_path')); $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
class FakeCsrfProvider implements CsrfProviderInterface
{
public function generateCsrfToken($intention) public function generateCsrfToken($intention)
{ {
return $intention.'123'; return $intention.'123';
...@@ -173,4 +203,27 @@ class FakeCsrfProvider implements CsrfProviderInterface ...@@ -173,4 +203,27 @@ class FakeCsrfProvider implements CsrfProviderInterface
{ {
return $token === $this->generateCsrfToken($intention); return $token === $this->generateCsrfToken($intention);
} }
}
} else {
class FakeCsrfProvider implements CsrfTokenManagerInterface
{
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