diff --git a/UPGRADE-2.7.md b/UPGRADE-2.7.md
new file mode 100644
index 0000000000..a425e18a9f
--- /dev/null
+++ b/UPGRADE-2.7.md
@@ -0,0 +1,61 @@
+UPGRADE FROM 2.6 to 2.7
+=======================
+
+Router
+------
+
+ * Route conditions now support container parameters which
+ can be injected into condition using `%parameter%` notation.
+ Due to the fact that it works by replacing all parameters
+ with their corresponding values before passing condition
+ expression for compilation there can be BC breaks where you
+ could already have used percentage symbols. Single percentage symbol
+ usage is not affected in any way. Conflicts may occur where
+ you might have used `%` as a modulo operator, here's an example:
+ `foo%bar%2` which would be compiled to `$foo % $bar % 2` in 2.6
+ but in 2.7 you would get an error if `bar` parameter
+ doesn't exist or unexpected result otherwise.
+
+Form
+----
+
+ * In form types and extension overriding the "setDefaultOptions" of the
+ AbstractType or AbstractExtensionType has been deprecated in favor of
+ overriding the new "configureOptions" method.
+
+ The method "setDefaultOptions(OptionsResolverInterface $resolver)" will
+ be renamed in Symfony 3.0 to "configureOptions(OptionsResolver $resolver)".
+
+ Before:
+
+ ```php
+ use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+
+ class TaskType extends AbstractType
+ {
+ // ...
+ public function setDefaultOptions(OptionsResolverInterface $resolver)
+ {
+ $resolver->setDefaults(array(
+ 'data_class' => 'AppBundle\Entity\Task',
+ ));
+ }
+ }
+ ```
+
+ After:
+
+ ```php
+ use Symfony\Component\OptionsResolver\OptionsResolver;
+
+ class TaskType extends AbstractType
+ {
+ // ...
+ public function configureOptions(OptionsResolver $resolver)
+ {
+ $resolver->setDefaults(array(
+ 'data_class' => 'AppBundle\Entity\Task',
+ ));
+ }
+ }
+ ```
diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md
index cda02388e9..9252af3dac 100644
--- a/UPGRADE-3.0.md
+++ b/UPGRADE-3.0.md
@@ -106,6 +106,11 @@ UPGRADE FROM 2.x to 3.0
### Form
+ * The method `AbstractType::setDefaultOptions(OptionsResolverInterface $resolver)` and
+ `AbstractTypeExtension::setDefaultOptions(OptionsResolverInterface $resolver)` have been
+ renamed. You should use `AbstractType::configureOptions(OptionsResolver $resolver)` and
+ `AbstractTypeExtension::configureOptions(OptionsResolver $resolver)` instead.
+
* The methods `Form::bind()` and `Form::isBound()` were removed. You should
use `Form::submit()` and `Form::isSubmitted()` instead.
diff --git a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
index a73cb0986b..84d4b2fd53 100644
--- a/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
+++ b/src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
@@ -21,7 +21,7 @@ use Symfony\Bridge\Doctrine\Form\EventListener\MergeDoctrineCollectionListener;
use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
@@ -58,7 +58,7 @@ abstract class DoctrineType extends AbstractType
}
}
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$choiceListCache = & $this->choiceListCache;
$registry = $this->registry;
diff --git a/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php b/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php
index 6e4e4544ec..826660dacf 100644
--- a/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php
+++ b/src/Symfony/Bridge/Propel1/Form/Type/ModelType.php
@@ -16,7 +16,7 @@ use Symfony\Bridge\Propel1\Form\DataTransformer\CollectionToArrayTransformer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
@@ -78,7 +78,7 @@ class ModelType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$propertyAccessor = $this->propertyAccessor;
diff --git a/src/Symfony/Bridge/Propel1/Form/Type/TranslationCollectionType.php b/src/Symfony/Bridge/Propel1/Form/Type/TranslationCollectionType.php
index 8aaa120b55..a19bb45361 100644
--- a/src/Symfony/Bridge/Propel1/Form/Type/TranslationCollectionType.php
+++ b/src/Symfony/Bridge/Propel1/Form/Type/TranslationCollectionType.php
@@ -14,7 +14,7 @@ namespace Symfony\Bridge\Propel1\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Propel1\Form\EventListener\TranslationCollectionFormListener;
/**
@@ -59,7 +59,7 @@ class TranslationCollectionType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired(array(
'languages',
diff --git a/src/Symfony/Bridge/Propel1/Form/Type/TranslationType.php b/src/Symfony/Bridge/Propel1/Form/Type/TranslationType.php
index 7fed076fe0..9ee82d8d84 100644
--- a/src/Symfony/Bridge/Propel1/Form/Type/TranslationType.php
+++ b/src/Symfony/Bridge/Propel1/Form/Type/TranslationType.php
@@ -13,7 +13,7 @@ namespace Symfony\Bridge\Propel1\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Propel1\Form\EventListener\TranslationFormListener;
/**
@@ -44,7 +44,7 @@ class TranslationType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired(array(
'data_class',
diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml
index 3038f40e97..277054442f 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml
+++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/esi.xml
@@ -6,7 +6,7 @@
Symfony\Component\HttpKernel\HttpCache\Esi
- Symfony\Component\HttpKernel\EventListener\EsiListener
+ Symfony\Component\HttpKernel\EventListener\SurrogateListener
diff --git a/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php b/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
index 46882cdc4f..c0b68a2d17 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Routing/Router.php
@@ -113,6 +113,7 @@ class Router extends BaseRouter implements WarmableInterface
$methods = array_merge($methods, explode('|', $this->resolve($method)));
}
$route->setMethods($methods);
+ $route->setCondition($this->resolve($route->getCondition()));
}
}
diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RouterTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RouterTest.php
index 0d3dab8488..330e0659ca 100644
--- a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RouterTest.php
+++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/RouterTest.php
@@ -28,16 +28,18 @@ class RouterTest extends \PHPUnit_Framework_TestCase
),
array(
'_locale' => 'en|es',
- )
+ ), array(), '', array(), array(), '"%foo%" == "bar"'
));
$sc = $this->getServiceContainer($routes);
$sc->setParameter('locale', 'es');
+ $sc->setParameter('foo', 'bar');
$router = new Router($sc, 'foo');
$this->assertSame('/en', $router->generate('foo', array('_locale' => 'en')));
$this->assertSame('/', $router->generate('foo', array('_locale' => 'es')));
+ $this->assertSame('"bar" == "bar"', $router->getRouteCollection()->get('foo')->getCondition());
}
public function testDefaultsPlaceholders()
diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/templating_php.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/templating_php.xml
index 033cba0ef9..02ffa59582 100644
--- a/src/Symfony/Bundle/SecurityBundle/Resources/config/templating_php.xml
+++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/templating_php.xml
@@ -12,8 +12,9 @@
-
+
+
diff --git a/src/Symfony/Bundle/SecurityBundle/Templating/Helper/LogoutUrlHelper.php b/src/Symfony/Bundle/SecurityBundle/Templating/Helper/LogoutUrlHelper.php
index 3532c2cb78..8ef5ee7a42 100644
--- a/src/Symfony/Bundle/SecurityBundle/Templating/Helper/LogoutUrlHelper.php
+++ b/src/Symfony/Bundle/SecurityBundle/Templating/Helper/LogoutUrlHelper.php
@@ -14,7 +14,9 @@ namespace Symfony\Bundle\SecurityBundle\Templating\Helper;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderAdapter;
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Templating\Helper\Helper;
@@ -25,20 +27,33 @@ use Symfony\Component\Templating\Helper\Helper;
*/
class LogoutUrlHelper extends Helper
{
- private $container;
+ private $requestStack;
private $listeners = array();
private $router;
+ private $tokenStorage;
/**
* Constructor.
*
- * @param ContainerInterface $container A ContainerInterface instance
- * @param UrlGeneratorInterface $router A Router instance
+ * @param ContainerInterface|RequestStack $requestStack A ContainerInterface instance or RequestStack
+ * @param UrlGeneratorInterface $router The router service
+ * @param TokenStorageInterface|null $tokenStorage The token storage service
+ *
+ * @deprecated Passing a ContainerInterface as a first argument is deprecated since 2.7 and will be removed in 3.0.
*/
- public function __construct(ContainerInterface $container, UrlGeneratorInterface $router)
+ public function __construct($requestStack, UrlGeneratorInterface $router, TokenStorageInterface $tokenStorage = null)
{
- $this->container = $container;
+ if ($requestStack instanceof ContainerInterface) {
+ $this->requestStack = $requestStack->get('request_stack');
+ trigger_error('The '.__CLASS__.' constructor will require a RequestStack instead of a ContainerInterface instance in 3.0.', E_USER_DEPRECATED);
+ } elseif ($requestStack instanceof RequestStack) {
+ $this->requestStack = $requestStack;
+ } else {
+ throw new \InvalidArgumentException(sprintf('%s takes either a RequestStack or a ContainerInterface object as its first argument.', __METHOD__));
+ }
+
$this->router = $router;
+ $this->tokenStorage = $tokenStorage;
}
/**
@@ -64,7 +79,7 @@ class LogoutUrlHelper extends Helper
/**
* Generates the absolute logout path for the firewall.
*
- * @param string $key The firewall key
+ * @param string|null $key The firewall key or null to use the current firewall key
*
* @return string The logout path
*/
@@ -76,7 +91,7 @@ class LogoutUrlHelper extends Helper
/**
* Generates the absolute logout URL for the firewall.
*
- * @param string $key The firewall key
+ * @param string|null $key The firewall key or null to use the current firewall key
*
* @return string The logout URL
*/
@@ -88,15 +103,27 @@ class LogoutUrlHelper extends Helper
/**
* Generates the logout URL for the firewall.
*
- * @param string $key The firewall key
+ * @param string|null $key The firewall key or null to use the current firewall key
* @param bool|string $referenceType The type of reference (one of the constants in UrlGeneratorInterface)
*
* @return string The logout URL
*
- * @throws \InvalidArgumentException if no LogoutListener is registered for the key
+ * @throws \InvalidArgumentException if no LogoutListener is registered for the key or the key could not be found automatically.
*/
private function generateLogoutUrl($key, $referenceType)
{
+ // Fetch the current provider key from token, if possible
+ if (null === $key && null !== $this->tokenStorage) {
+ $token = $this->tokenStorage->getToken();
+ if (null !== $token && method_exists($token, 'getProviderKey')) {
+ $key = $token->getProviderKey();
+ }
+ }
+
+ if (null === $key) {
+ throw new \InvalidArgumentException('Unable to find the current firewall LogoutListener, please provide the provider key manually.');
+ }
+
if (!array_key_exists($key, $this->listeners)) {
throw new \InvalidArgumentException(sprintf('No LogoutListener found for firewall key "%s".', $key));
}
@@ -106,7 +133,7 @@ class LogoutUrlHelper extends Helper
$parameters = null !== $csrfTokenManager ? array($csrfParameter => (string) $csrfTokenManager->getToken($csrfTokenId)) : array();
if ('/' === $logoutPath[0]) {
- $request = $this->container->get('request_stack')->getCurrentRequest();
+ $request = $this->requestStack->getCurrentRequest();
$url = UrlGeneratorInterface::ABSOLUTE_URL === $referenceType ? $request->getUriForPath($logoutPath) : $request->getBasePath().$logoutPath;
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/CsrfFormLoginBundle/Form/UserLoginFormType.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/CsrfFormLoginBundle/Form/UserLoginFormType.php
index c615ef5fd6..d782f3a658 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/CsrfFormLoginBundle/Form/UserLoginFormType.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/CsrfFormLoginBundle/Form/UserLoginFormType.php
@@ -17,7 +17,7 @@ use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\HttpFoundation\RequestStack;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security;
/**
@@ -74,7 +74,7 @@ class UserLoginFormType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
/* Note: the form's intention must correspond to that for the form login
* listener in order for the CSRF token to validate successfully.
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/FormLoginBundle/Resources/views/Login/after_login.html.twig b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/FormLoginBundle/Resources/views/Login/after_login.html.twig
index 9972b48ae7..3ef1f9c7bd 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/FormLoginBundle/Resources/views/Login/after_login.html.twig
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/FormLoginBundle/Resources/views/Login/after_login.html.twig
@@ -3,4 +3,14 @@
{% block body %}
Hello {{ app.user.username }}!
You're browsing to path "{{ app.request.pathInfo }}".
+
+ Log out.
+ Log out.
+
+ Log out.
+ Log out.
+
+ Log out.
+ Log out.
+
{% endblock %}
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FormLoginTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FormLoginTest.php
index 0dc038e1df..6119b45803 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FormLoginTest.php
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/FormLoginTest.php
@@ -36,6 +36,40 @@ class FormLoginTest extends WebTestCase
$this->assertContains('You\'re browsing to path "/profile".', $text);
}
+ /**
+ * @dataProvider getConfigs
+ */
+ public function testFormLogout($config)
+ {
+ $client = $this->createClient(array('test_case' => 'StandardFormLogin', 'root_config' => $config));
+ $client->insulate();
+
+ $form = $client->request('GET', '/login')->selectButton('login')->form();
+ $form['_username'] = 'johannes';
+ $form['_password'] = 'test';
+ $client->submit($form);
+
+ $this->assertRedirect($client->getResponse(), '/profile');
+
+ $crawler = $client->followRedirect();
+ $text = $crawler->text();
+
+ $this->assertContains('Hello johannes!', $text);
+ $this->assertContains('You\'re browsing to path "/profile".', $text);
+
+ $logoutLinks = $crawler->selectLink('Log out')->links();
+ $this->assertCount(6, $logoutLinks);
+ $this->assertSame($logoutLinks[0]->getUri(), $logoutLinks[1]->getUri());
+ $this->assertSame($logoutLinks[2]->getUri(), $logoutLinks[3]->getUri());
+ $this->assertSame($logoutLinks[4]->getUri(), $logoutLinks[5]->getUri());
+
+ $this->assertNotSame($logoutLinks[0]->getUri(), $logoutLinks[2]->getUri());
+ $this->assertNotSame($logoutLinks[1]->getUri(), $logoutLinks[3]->getUri());
+
+ $this->assertSame($logoutLinks[0]->getUri(), $logoutLinks[4]->getUri());
+ $this->assertSame($logoutLinks[1]->getUri(), $logoutLinks[5]->getUri());
+ }
+
/**
* @dataProvider getConfigs
*/
diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/config.yml b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/config.yml
index 624637b0c8..19b9d8952e 100644
--- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/config.yml
+++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/StandardFormLogin/config.yml
@@ -23,8 +23,17 @@ security:
form_login:
check_path: /login_check
default_target_path: /profile
+ logout: ~
anonymous: ~
+ # This firewall is here just to check its the logout functionality
+ second_area:
+ http_basic: ~
+ anonymous: ~
+ logout:
+ target: /second/target
+ path: /second/logout
+
access_control:
- { path: ^/unprotected_resource$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/secure-but-not-covered-by-access-control$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
diff --git a/src/Symfony/Bundle/SecurityBundle/Twig/Extension/LogoutUrlExtension.php b/src/Symfony/Bundle/SecurityBundle/Twig/Extension/LogoutUrlExtension.php
index 8d28b3f246..3473f97cad 100644
--- a/src/Symfony/Bundle/SecurityBundle/Twig/Extension/LogoutUrlExtension.php
+++ b/src/Symfony/Bundle/SecurityBundle/Twig/Extension/LogoutUrlExtension.php
@@ -41,11 +41,11 @@ class LogoutUrlExtension extends \Twig_Extension
/**
* Generates the relative logout URL for the firewall.
*
- * @param string $key The firewall key
+ * @param string|null $key The firewall key or null to use the current firewall key
*
* @return string The relative logout URL
*/
- public function getLogoutPath($key)
+ public function getLogoutPath($key = null)
{
return $this->helper->getLogoutPath($key);
}
@@ -53,11 +53,11 @@ class LogoutUrlExtension extends \Twig_Extension
/**
* Generates the absolute logout URL for the firewall.
*
- * @param string $key The firewall key
+ * @param string|null $key The firewall key or null to use the current firewall key
*
* @return string The absolute logout URL
*/
- public function getLogoutUrl($key)
+ public function getLogoutUrl($key = null)
{
return $this->helper->getLogoutUrl($key);
}
diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php
index 893b627394..8a9aeec7f3 100644
--- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php
+++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php
@@ -13,7 +13,6 @@ namespace Symfony\Bundle\TwigBundle\DependencyInjection\Compiler;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Reference;
/**
@@ -60,10 +59,6 @@ class ExtensionPass implements CompilerPassInterface
$container->getDefinition('twig.extension.code')->replaceArgument(0, $container->getParameter('templating.helper.code.file_link_format'));
}
- if (!$container->has('security.token_storage')) {
- $container->getDefinition('twig.app_variable')->addMethodCall('setSecurity', array(new Reference('security.context', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)));
- }
-
if ($container->has('templating')) {
$container->getDefinition('twig.cache_warmer')->addTag('kernel.cache_warmer');
diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml
index 4bfe33687b..aa0b6db9e9 100644
--- a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml
+++ b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml
@@ -40,6 +40,7 @@
%kernel.environment%
%kernel.debug%
+
diff --git a/src/Symfony/Component/Form/AbstractType.php b/src/Symfony/Component/Form/AbstractType.php
index 6f7f5da653..08d6915344 100644
--- a/src/Symfony/Component/Form/AbstractType.php
+++ b/src/Symfony/Component/Form/AbstractType.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Form;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
/**
@@ -43,6 +44,16 @@ abstract class AbstractType implements FormTypeInterface
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
+ {
+ $this->configureOptions($resolver);
+ }
+
+ /**
+ * Configures the options for this type.
+ *
+ * @param OptionsResolver $resolver The resolver for the options.
+ */
+ public function configureOptions(OptionsResolver $resolver)
{
}
diff --git a/src/Symfony/Component/Form/AbstractTypeExtension.php b/src/Symfony/Component/Form/AbstractTypeExtension.php
index 351c80097f..140fe5fdd6 100644
--- a/src/Symfony/Component/Form/AbstractTypeExtension.php
+++ b/src/Symfony/Component/Form/AbstractTypeExtension.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Form;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
/**
@@ -43,6 +44,16 @@ abstract class AbstractTypeExtension implements FormTypeExtensionInterface
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
+ {
+ $this->configureOptions($resolver);
+ }
+
+ /**
+ * Configures the options for this type.
+ *
+ * @param OptionsResolver $resolver The resolver for the options.
+ */
+ public function configureOptions(OptionsResolver $resolver)
{
}
}
diff --git a/src/Symfony/Component/Form/CHANGELOG.md b/src/Symfony/Component/Form/CHANGELOG.md
index 4611542054..07c96077c2 100644
--- a/src/Symfony/Component/Form/CHANGELOG.md
+++ b/src/Symfony/Component/Form/CHANGELOG.md
@@ -1,6 +1,12 @@
CHANGELOG
=========
+2.7.0
+-----
+
+ * deprecated the overwriting of AbstractType::setDefaultOptions() in favor of overwriting AbstractType::configureOptions().
+ * deprecated the overwriting of AbstractTypeExtension::setDefaultOptions() in favor of overwriting AbstractTypeExtension::configureOptions().
+
2.6.2
-----
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/BaseType.php b/src/Symfony/Component/Form/Extension/Core/Type/BaseType.php
index c03b7e88a7..c8610ee9d3 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/BaseType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/BaseType.php
@@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Encapsulates common logic of {@link FormType} and {@link ButtonType}.
@@ -111,7 +111,7 @@ abstract class BaseType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'block_name' => null,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php b/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php
index f90f57d4b6..bc2711d586 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/BirthdayType.php
@@ -12,14 +12,14 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class BirthdayType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'years' => range(date('Y') - 120, date('Y')),
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php b/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php
index c4b97652cd..7456adc93d 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/ButtonType.php
@@ -12,7 +12,7 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\ButtonTypeInterface;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* A form button.
@@ -39,9 +39,9 @@ class ButtonType extends BaseType implements ButtonTypeInterface
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
- parent::setDefaultOptions($resolver);
+ parent::configureOptions($resolver);
$resolver->setDefaults(array(
'auto_initialize' => false,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php b/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php
index 13c78041d0..53a5e05275 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/CheckboxType.php
@@ -16,7 +16,7 @@ use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\BooleanToStringTransformer;
use Symfony\Component\Form\FormView;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class CheckboxType extends AbstractType
{
@@ -49,7 +49,7 @@ class CheckboxType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$emptyData = function (FormInterface $form, $viewData) {
return $viewData;
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php
index b705659e97..81b171fe5b 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php
@@ -26,7 +26,7 @@ use Symfony\Component\Form\Extension\Core\DataTransformer\ChoiceToBooleanArrayTr
use Symfony\Component\Form\Extension\Core\DataTransformer\ChoicesToValuesTransformer;
use Symfony\Component\Form\Extension\Core\DataTransformer\ChoicesToBooleanArrayTransformer;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class ChoiceType extends AbstractType
{
@@ -161,7 +161,7 @@ class ChoiceType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$choiceListCache = & $this->choiceListCache;
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.php b/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.php
index 2fed7cea88..ccfec39682 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.php
@@ -17,7 +17,7 @@ use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class CollectionType extends AbstractType
{
@@ -72,7 +72,7 @@ class CollectionType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$optionsNormalizer = function (Options $options, $value) {
$value['block_name'] = 'entry';
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/CountryType.php b/src/Symfony/Component/Form/Extension/Core/Type/CountryType.php
index 3482ba6634..e6231c596b 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/CountryType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/CountryType.php
@@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Intl\Intl;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class CountryType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => Intl::getRegionBundle()->getCountryNames(),
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/CurrencyType.php b/src/Symfony/Component/Form/Extension/Core/Type/CurrencyType.php
index 3a925e3a3d..9d77b76381 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/CurrencyType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/CurrencyType.php
@@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Intl\Intl;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class CurrencyType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => Intl::getCurrencyBundle()->getCurrencyNames(),
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php
index 252d370080..72e735787b 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php
@@ -25,7 +25,7 @@ use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTra
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToRfc3339Transformer;
use Symfony\Component\Form\Extension\Core\DataTransformer\ArrayToPartsTransformer;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class DateTimeType extends AbstractType
{
@@ -200,7 +200,7 @@ class DateTimeType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$compound = function (Options $options) {
return $options['widget'] !== 'single_text';
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php
index dc553ad8dd..48984b61f3 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php
@@ -21,7 +21,7 @@ use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToStringTransf
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
use Symfony\Component\Form\ReversedTransformer;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
class DateType extends AbstractType
@@ -165,7 +165,7 @@ class DateType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$compound = function (Options $options) {
return $options['widget'] !== 'single_text';
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FileType.php b/src/Symfony/Component/Form/Extension/Core/Type/FileType.php
index 0f7bb3c7cd..bc24899de5 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/FileType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/FileType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class FileType extends AbstractType
{
@@ -47,7 +47,7 @@ class FileType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'compound' => false,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/FormType.php b/src/Symfony/Component/Form/Extension/Core/Type/FormType.php
index a30de1df84..3fcacd50e9 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/FormType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/FormType.php
@@ -18,7 +18,7 @@ use Symfony\Component\Form\Extension\Core\EventListener\TrimListener;
use Symfony\Component\Form\Extension\Core\DataMapper\PropertyPathMapper;
use Symfony\Component\Form\Exception\LogicException;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
@@ -122,9 +122,9 @@ class FormType extends BaseType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
- parent::setDefaultOptions($resolver);
+ parent::configureOptions($resolver);
// Derive "data_class" option from passed "data" object
$dataClass = function (Options $options) {
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/HiddenType.php b/src/Symfony/Component/Form/Extension/Core/Type/HiddenType.php
index 352b34620c..37b25435e1 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/HiddenType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/HiddenType.php
@@ -12,14 +12,14 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class HiddenType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
// hidden fields cannot have a required attribute
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php b/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php
index 575dcb1fbd..b36637ad67 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/IntegerType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\IntegerToLocalizedStringTransformer;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class IntegerType extends AbstractType
{
@@ -34,7 +34,7 @@ class IntegerType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
// default precision is locale specific (usually around 3)
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/LanguageType.php b/src/Symfony/Component/Form/Extension/Core/Type/LanguageType.php
index 37b2bf3300..4bd09d26e9 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/LanguageType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/LanguageType.php
@@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Intl\Intl;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class LanguageType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => Intl::getLanguageBundle()->getLanguageNames(),
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/LocaleType.php b/src/Symfony/Component/Form/Extension/Core/Type/LocaleType.php
index 4610c1b459..92a41080e4 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/LocaleType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/LocaleType.php
@@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Intl\Intl;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class LocaleType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => Intl::getLocaleBundle()->getLocaleNames(),
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php b/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php
index 9653d6f8ab..781fe7ac65 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/MoneyType.php
@@ -16,7 +16,7 @@ use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\MoneyToLocalizedStringTransformer;
use Symfony\Component\Form\FormView;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class MoneyType extends AbstractType
{
@@ -48,7 +48,7 @@ class MoneyType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'precision' => 2,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php b/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php
index 5b06e88bbe..946c9d44e4 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/NumberType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class NumberType extends AbstractType
{
@@ -33,7 +33,7 @@ class NumberType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
// default precision is locale specific (usually around 3)
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/PasswordType.php b/src/Symfony/Component/Form/Extension/Core/Type/PasswordType.php
index 8f5633c6d1..611eb4d4a3 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/PasswordType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/PasswordType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class PasswordType extends AbstractType
{
@@ -31,7 +31,7 @@ class PasswordType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'always_empty' => true,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php b/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php
index 079eca0497..51632f031e 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/PercentType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class PercentType extends AbstractType
{
@@ -29,7 +29,7 @@ class PercentType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'precision' => 0,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php b/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php
index 47a3299359..a0d13f7faa 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/RepeatedType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\ValueToDuplicatesTransformer;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class RepeatedType extends AbstractType
{
@@ -44,7 +44,7 @@ class RepeatedType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'type' => 'text',
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TextType.php b/src/Symfony/Component/Form/Extension/Core/Type/TextType.php
index 11503261c5..4aef1cd6e6 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/TextType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/TextType.php
@@ -12,14 +12,14 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class TextType extends AbstractType
{
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'compound' => false,
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
index 4fd2cba56c..851d483f30 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
@@ -21,7 +21,7 @@ use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToTimestampTra
use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeToArrayTransformer;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class TimeType extends AbstractType
{
@@ -157,7 +157,7 @@ class TimeType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$compound = function (Options $options) {
return $options['widget'] !== 'single_text';
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/TimezoneType.php b/src/Symfony/Component/Form/Extension/Core/Type/TimezoneType.php
index 96b1407768..d19fb52fdc 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/TimezoneType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/TimezoneType.php
@@ -12,7 +12,7 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class TimezoneType extends AbstractType
{
@@ -26,7 +26,7 @@ class TimezoneType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => self::getTimezones(),
diff --git a/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php b/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php
index 5c414afc93..0deba91086 100644
--- a/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php
+++ b/src/Symfony/Component/Form/Extension/Core/Type/UrlType.php
@@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class UrlType extends AbstractType
{
@@ -31,7 +31,7 @@ class UrlType extends AbstractType
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'default_protocol' => 'http',
diff --git a/src/Symfony/Component/Form/Extension/Csrf/Type/FormTypeCsrfExtension.php b/src/Symfony/Component/Form/Extension/Csrf/Type/FormTypeCsrfExtension.php
index b693894159..35d8648215 100644
--- a/src/Symfony/Component/Form/Extension/Csrf/Type/FormTypeCsrfExtension.php
+++ b/src/Symfony/Component/Form/Extension/Csrf/Type/FormTypeCsrfExtension.php
@@ -21,7 +21,7 @@ use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Translation\TranslatorInterface;
@@ -119,7 +119,7 @@ class FormTypeCsrfExtension extends AbstractTypeExtension
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
// BC clause for the "intention" option
$csrfTokenId = function (Options $options) {
diff --git a/src/Symfony/Component/Form/Extension/Validator/Type/BaseValidatorExtension.php b/src/Symfony/Component/Form/Extension/Validator/Type/BaseValidatorExtension.php
index f5bc00daa6..ada55dce27 100644
--- a/src/Symfony/Component/Form/Extension/Validator/Type/BaseValidatorExtension.php
+++ b/src/Symfony/Component/Form/Extension/Validator/Type/BaseValidatorExtension.php
@@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Validator\Type;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* Encapsulates common logic of {@link FormTypeValidatorExtension} and
@@ -26,7 +26,7 @@ abstract class BaseValidatorExtension extends AbstractTypeExtension
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
// Make sure that validation groups end up as null, closure or array
$validationGroupsNormalizer = function (Options $options, $groups) {
diff --git a/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php b/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php
index 89238be707..e5d57df166 100644
--- a/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php
+++ b/src/Symfony/Component/Form/Extension/Validator/Type/FormTypeValidatorExtension.php
@@ -17,7 +17,7 @@ use Symfony\Component\Form\Extension\Validator\EventListener\ValidationListener;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* @author Bernhard Schussek
@@ -58,9 +58,9 @@ class FormTypeValidatorExtension extends BaseValidatorExtension
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
- parent::setDefaultOptions($resolver);
+ parent::configureOptions($resolver);
// Constraint should always be converted to an array
$constraintsNormalizer = function (Options $options, $constraints) {
diff --git a/src/Symfony/Component/Form/Extension/Validator/Type/RepeatedTypeValidatorExtension.php b/src/Symfony/Component/Form/Extension/Validator/Type/RepeatedTypeValidatorExtension.php
index 858ff0fae1..3eacceae63 100644
--- a/src/Symfony/Component/Form/Extension/Validator/Type/RepeatedTypeValidatorExtension.php
+++ b/src/Symfony/Component/Form/Extension/Validator/Type/RepeatedTypeValidatorExtension.php
@@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Validator\Type;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\OptionsResolver\Options;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* @author Bernhard Schussek
@@ -23,7 +23,7 @@ class RepeatedTypeValidatorExtension extends AbstractTypeExtension
/**
* {@inheritdoc}
*/
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
// Map errors to the first field
$errorMapping = function (Options $options) {
diff --git a/src/Symfony/Component/Form/FormTypeExtensionInterface.php b/src/Symfony/Component/Form/FormTypeExtensionInterface.php
index 946c7a74b3..220eb6f4b0 100644
--- a/src/Symfony/Component/Form/FormTypeExtensionInterface.php
+++ b/src/Symfony/Component/Form/FormTypeExtensionInterface.php
@@ -63,6 +63,10 @@ interface FormTypeExtensionInterface
* Overrides the default options from the extended type.
*
* @param OptionsResolverInterface $resolver The resolver for the options.
+ *
+ * @deprecated Deprecated since Symfony 2.7, to be removed in Symfony 3.0.
+ * Use the method configureOptions instead. This method will be
+ * added to the FormTypeExtensionInterface with Symfony 3.0
*/
public function setDefaultOptions(OptionsResolverInterface $resolver);
diff --git a/src/Symfony/Component/Form/FormTypeInterface.php b/src/Symfony/Component/Form/FormTypeInterface.php
index 78f8bd0083..fc0bb046cb 100644
--- a/src/Symfony/Component/Form/FormTypeInterface.php
+++ b/src/Symfony/Component/Form/FormTypeInterface.php
@@ -72,6 +72,10 @@ interface FormTypeInterface
* Sets the default options for this type.
*
* @param OptionsResolverInterface $resolver The resolver for the options.
+ *
+ * @deprecated Deprecated since Symfony 2.7, to be renamed in Symfony 3.0.
+ * Use the method configureOptions instead. This method will be
+ * added to the FormTypeInterface with Symfony 3.0.
*/
public function setDefaultOptions(OptionsResolverInterface $resolver);
diff --git a/src/Symfony/Component/Form/ResolvedFormType.php b/src/Symfony/Component/Form/ResolvedFormType.php
index 065189a42c..e3c897a981 100644
--- a/src/Symfony/Component/Form/ResolvedFormType.php
+++ b/src/Symfony/Component/Form/ResolvedFormType.php
@@ -205,8 +205,22 @@ class ResolvedFormType implements ResolvedFormTypeInterface
$this->innerType->setDefaultOptions($this->optionsResolver);
+ $reflector = new \ReflectionMethod($this->innerType, 'setDefaultOptions');
+ $isOverwritten = ($reflector->getDeclaringClass()->getName() !== 'Symfony\Component\Form\AbstractType');
+
+ if (true === $isOverwritten) {
+ trigger_error('The FormTypeInterface::setDefaultOptions() method is deprecated since version 2.7 and will be removed in 3.0. Use configureOptions() instead. This method will be added to the FormTypeInterface with Symfony 3.0.', E_USER_DEPRECATED);
+ }
+
foreach ($this->typeExtensions as $extension) {
$extension->setDefaultOptions($this->optionsResolver);
+
+ $reflector = new \ReflectionMethod($extension, 'setDefaultOptions');
+ $isOverwritten = ($reflector->getDeclaringClass()->getName() !== 'Symfony\Component\Form\AbstractTypeExtension');
+
+ if (true === $isOverwritten) {
+ trigger_error('The FormTypeExtensionInterface::setDefaultOptions() method is deprecated since version 2.7 and will be removed in 3.0. Use configureOptions() instead. This method will be added to the FormTypeExtensionInterface with Symfony 3.0.', E_USER_DEPRECATED);
+ }
}
}
diff --git a/src/Symfony/Component/Form/Tests/Fixtures/AuthorType.php b/src/Symfony/Component/Form/Tests/Fixtures/AuthorType.php
index 147f6e4867..62c80cbb37 100644
--- a/src/Symfony/Component/Form/Tests/Fixtures/AuthorType.php
+++ b/src/Symfony/Component/Form/Tests/Fixtures/AuthorType.php
@@ -4,7 +4,7 @@ namespace Symfony\Component\Form\Tests\Fixtures;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
class AuthorType extends AbstractType
{
@@ -21,7 +21,7 @@ class AuthorType extends AbstractType
return 'author';
}
- public function setDefaultOptions(OptionsResolverInterface $resolver)
+ public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
diff --git a/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php b/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php
index 333f3262b2..e224cf31b0 100644
--- a/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php
+++ b/src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php
@@ -12,9 +12,8 @@
namespace Symfony\Component\Form\Tests;
use Symfony\Component\Form\ResolvedFormType;
-use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormBuilder;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* @author Bernhard Schussek
@@ -60,7 +59,7 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
$i = 0;
$assertIndexAndAddOption = function ($index, $option, $default) use (&$i) {
- return function (OptionsResolverInterface $resolver) use (&$i, $index, $option, $default) {
+ return function (OptionsResolver $resolver) use (&$i, $index, $option, $default) {
$this->assertEquals($index, $i, 'Executed at index '.$index);
++$i;
@@ -71,21 +70,21 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
// First the default options are generated for the super type
$this->parentType->expects($this->once())
- ->method('setDefaultOptions')
+ ->method('configureOptions')
->will($this->returnCallback($assertIndexAndAddOption(0, 'a', 'a_default')));
// The form type itself
$this->type->expects($this->once())
- ->method('setDefaultOptions')
+ ->method('configureOptions')
->will($this->returnCallback($assertIndexAndAddOption(1, 'b', 'b_default')));
// And its extensions
$this->extension1->expects($this->once())
- ->method('setDefaultOptions')
+ ->method('configureOptions')
->will($this->returnCallback($assertIndexAndAddOption(2, 'c', 'c_default')));
$this->extension2->expects($this->once())
- ->method('setDefaultOptions')
+ ->method('configureOptions')
->will($this->returnCallback($assertIndexAndAddOption(3, 'd', 'd_default')));
$givenOptions = array('a' => 'a_custom', 'c' => 'c_custom');
@@ -303,7 +302,7 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
*/
private function getMockFormType()
{
- return $this->getMock('Symfony\Component\Form\FormTypeInterface');
+ return $this->getMock('Symfony\Component\Form\AbstractType', array('getName', 'configureOptions', 'finishView', 'buildView', 'buildForm'));
}
/**
@@ -311,7 +310,7 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
*/
private function getMockFormTypeExtension()
{
- return $this->getMock('Symfony\Component\Form\FormTypeExtensionInterface');
+ return $this->getMock('Symfony\Component\Form\AbstractTypeExtension', array('getExtendedType', 'configureOptions', 'finishView', 'buildView', 'buildForm'));
}
/**
diff --git a/src/Symfony/Component/Validator/Mapping/Deprecated/TraversalStrategy.php b/src/Symfony/Component/Validator/Mapping/Deprecated/TraversalStrategy.php
deleted file mode 100644
index 28921e0b0b..0000000000
--- a/src/Symfony/Component/Validator/Mapping/Deprecated/TraversalStrategy.php
+++ /dev/null
@@ -1,27 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Validator\Mapping\Deprecated;
-
-trigger_error('Constants STOP_RECURSION in class Symfony\Component\Validator\Mapping\TraversalStrategy is deprecated since version 2.3 and will be removed in 3.0.', E_USER_DEPRECATED);
-
-/**
- * @deprecated since version 2.7, to be removed in 3.0.
- * @internal
- */
-final class TraversalStrategy
-{
- const STOP_RECURSION = 8;
-
- private function __construct()
- {
- }
-}
diff --git a/src/Symfony/Component/Validator/Mapping/ElementMetadata.php b/src/Symfony/Component/Validator/Mapping/ElementMetadata.php
index d036dcf2f1..6886a8993d 100644
--- a/src/Symfony/Component/Validator/Mapping/ElementMetadata.php
+++ b/src/Symfony/Component/Validator/Mapping/ElementMetadata.php
@@ -11,8 +11,6 @@
namespace Symfony\Component\Validator\Mapping;
-trigger_error('The '.__NAMESPACE__.'\ElementMetadata class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\GenericMetadata class instead.', E_USER_DEPRECATED);
-
/**
* Contains the metadata of a structural element.
*
@@ -23,4 +21,10 @@ trigger_error('The '.__NAMESPACE__.'\ElementMetadata class is deprecated since v
*/
abstract class ElementMetadata extends GenericMetadata
{
+ public function __construct()
+ {
+ if (__CLASS__ === get_class($this) || !in_array(get_parent_class($this), array('Symfony\Component\Validator\Mapping\MemberMetadata', 'Symfony\Component\Validator\Mapping\ClassMetadata'))) {
+ trigger_error('The '.__CLASS__.' class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Mapping\GenericMetadata class instead.', E_USER_DEPRECATED);
+ }
+ }
}
diff --git a/src/Symfony/Component/Validator/Mapping/TraversalStrategy.php b/src/Symfony/Component/Validator/Mapping/TraversalStrategy.php
index f8e646ffc4..450a3ecc0a 100644
--- a/src/Symfony/Component/Validator/Mapping/TraversalStrategy.php
+++ b/src/Symfony/Component/Validator/Mapping/TraversalStrategy.php
@@ -11,8 +11,6 @@
namespace Symfony\Component\Validator\Mapping;
-use Symfony\Component\Validator\Mapping\Deprecated\TraversalStrategy as Deprecated;
-
/**
* Specifies whether and how a traversable object should be traversed.
*
@@ -57,7 +55,7 @@ class TraversalStrategy
*
* @internal
*/
- const STOP_RECURSION = Deprecated::STOP_RECURSION;
+ const STOP_RECURSION = 8;
/**
* Not instantiable.