Merge branch '2.7'
* 2.7: removed deprecation notice for internal constant removed deprecated notices when using the security service [Validator] fixed deprecation notice for ElementMetadata Revert "minor #13434 fixed some deprecated notices (fabpot)" removed usage of the deprecated EsiListener class in core [security] Fetching current stored context when not explicitly specified [FrameworkBundle] Container parameters in Route#condition Deprecated setDefaultOptions() in favor of configureOptions() Conflicts: src/Symfony/Bridge/Doctrine/composer.json src/Symfony/Bridge/Propel1/composer.json src/Symfony/Bridge/Twig/AppVariable.php src/Symfony/Bundle/FrameworkBundle/composer.json src/Symfony/Bundle/SecurityBundle/Tests/Functional/Bundle/CsrfFormLoginBundle/Form/UserLoginFormType.php src/Symfony/Component/Form/Tests/ResolvedFormTypeTest.php
This commit is contained in:
commit
30935c7b8c
61
UPGRADE-2.7.md
Normal file
61
UPGRADE-2.7.md
Normal file
@ -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',
|
||||
));
|
||||
}
|
||||
}
|
||||
```
|
@ -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.
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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',
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
<parameters>
|
||||
<parameter key="esi.class">Symfony\Component\HttpKernel\HttpCache\Esi</parameter>
|
||||
<parameter key="esi_listener.class">Symfony\Component\HttpKernel\EventListener\EsiListener</parameter>
|
||||
<parameter key="esi_listener.class">Symfony\Component\HttpKernel\EventListener\SurrogateListener</parameter>
|
||||
</parameters>
|
||||
|
||||
<services>
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
|
@ -12,8 +12,9 @@
|
||||
<services>
|
||||
<service id="templating.helper.logout_url" class="%templating.helper.logout_url.class%">
|
||||
<tag name="templating.helper" alias="logout_url" />
|
||||
<argument type="service" id="service_container" />
|
||||
<argument type="service" id="request_stack" />
|
||||
<argument type="service" id="router" />
|
||||
<argument type="service" id="security.token_storage" />
|
||||
</service>
|
||||
|
||||
<service id="templating.helper.security" class="%templating.helper.security.class%">
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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.
|
||||
|
@ -3,4 +3,14 @@
|
||||
{% block body %}
|
||||
Hello {{ app.user.username }}!<br /><br />
|
||||
You're browsing to path "{{ app.request.pathInfo }}".
|
||||
|
||||
<a href="{{ logout_path('default') }}">Log out</a>.
|
||||
<a href="{{ logout_url('default') }}">Log out</a>.
|
||||
|
||||
<a href="{{ logout_path('second_area') }}">Log out</a>.
|
||||
<a href="{{ logout_url('second_area') }}">Log out</a>.
|
||||
|
||||
<a href="{{ logout_path() }}">Log out</a>.
|
||||
<a href="{{ logout_url() }}">Log out</a>.
|
||||
|
||||
{% endblock %}
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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 }
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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');
|
||||
|
||||
|
@ -40,6 +40,7 @@
|
||||
<service id="twig.app_variable" class="Symfony\Bridge\Twig\AppVariable" public="false">
|
||||
<call method="setEnvironment"><argument>%kernel.environment%</argument></call>
|
||||
<call method="setDebug"><argument>%kernel.debug%</argument></call>
|
||||
<call method="setContainer"><argument type="service" id="service_container" /></call>
|
||||
<call method="setTokenStorage"><argument type="service" id="security.token_storage" on-invalid="ignore" /></call>
|
||||
<call method="setRequestStack"><argument type="service" id="request_stack" on-invalid="ignore" /></call>
|
||||
</service>
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
-----
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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')),
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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';
|
||||
|
@ -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(),
|
||||
|
@ -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(),
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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,
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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(),
|
||||
|
@ -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(),
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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',
|
||||
|
@ -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,
|
||||
|
@ -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';
|
||||
|
@ -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(),
|
||||
|
@ -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',
|
||||
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
@ -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 <bschussek@gmail.com>
|
||||
@ -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) {
|
||||
|
@ -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 <bschussek@gmail.com>
|
||||
@ -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) {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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',
|
||||
|
@ -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 <bschussek@gmail.com>
|
||||
@ -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'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,27 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* 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()
|
||||
{
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
Reference in New Issue
Block a user