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;
use Symfony\Component\Form\Extension\Validator\ValidatorExtension as FormValidatorExtension;
use Symfony\Component\Form\Forms;
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.
......@@ -104,11 +107,19 @@ class FormServiceProvider implements ServiceProviderInterface
});
$app['form.csrf_provider'] = $app->share(function ($app) {
if (isset($app['session'])) {
return new SessionCsrfProvider($app['session'], $app['form.secret']);
}
if (!class_exists('Symfony\Component\Form\Extension\DataCollector\DataCollectorExtension')) {
// 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;
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
use Symfony\Component\Form\FormTypeGuesserChain;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Translation\Exception\NotFoundResourceException;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
{
......@@ -112,7 +115,13 @@ class FormServiceProviderTest extends \PHPUnit_Framework_TestCase
))));
$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()
......@@ -149,28 +158,72 @@ class DummyFormType extends AbstractType
}
}
class DummyFormTypeExtension extends AbstractTypeExtension
{
public function getExtendedType()
if (method_exists('Symfony\Component\Form\AbstractType', 'configureOptions')) {
class DummyFormTypeExtension extends AbstractTypeExtension
{
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
{
public function generateCsrfToken($intention)
if (!class_exists('Symfony\Component\Form\Extension\DataCollector\DataCollectorExtension')) {
// Symfony 2.3 only
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
->getForm()
;
$form->bind(array('email' => $email));
$form->submit(array('email' => $email));
$this->assertEquals($isValid, $form->isValid());
$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