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
|
### 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
|
* The methods `Form::bind()` and `Form::isBound()` were removed. You should
|
||||||
use `Form::submit()` and `Form::isSubmitted()` instead.
|
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\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer;
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\PropertyAccess\PropertyAccess;
|
use Symfony\Component\PropertyAccess\PropertyAccess;
|
||||||
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
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;
|
$choiceListCache = & $this->choiceListCache;
|
||||||
$registry = $this->registry;
|
$registry = $this->registry;
|
||||||
|
@ -16,7 +16,7 @@ use Symfony\Bridge\Propel1\Form\DataTransformer\CollectionToArrayTransformer;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\PropertyAccess\PropertyAccess;
|
use Symfony\Component\PropertyAccess\PropertyAccess;
|
||||||
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class ModelType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$propertyAccessor = $this->propertyAccessor;
|
$propertyAccessor = $this->propertyAccessor;
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ namespace Symfony\Bridge\Propel1\Form\Type;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
|
use Symfony\Component\OptionsResolver\Exception\MissingOptionsException;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Bridge\Propel1\Form\EventListener\TranslationCollectionFormListener;
|
use Symfony\Bridge\Propel1\Form\EventListener\TranslationCollectionFormListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -59,7 +59,7 @@ class TranslationCollectionType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setRequired(array(
|
$resolver->setRequired(array(
|
||||||
'languages',
|
'languages',
|
||||||
|
@ -13,7 +13,7 @@ namespace Symfony\Bridge\Propel1\Form\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Bridge\Propel1\Form\EventListener\TranslationFormListener;
|
use Symfony\Bridge\Propel1\Form\EventListener\TranslationFormListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,7 +44,7 @@ class TranslationType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setRequired(array(
|
$resolver->setRequired(array(
|
||||||
'data_class',
|
'data_class',
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<parameters>
|
<parameters>
|
||||||
<parameter key="esi.class">Symfony\Component\HttpKernel\HttpCache\Esi</parameter>
|
<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>
|
</parameters>
|
||||||
|
|
||||||
<services>
|
<services>
|
||||||
|
@ -113,6 +113,7 @@ class Router extends BaseRouter implements WarmableInterface
|
|||||||
$methods = array_merge($methods, explode('|', $this->resolve($method)));
|
$methods = array_merge($methods, explode('|', $this->resolve($method)));
|
||||||
}
|
}
|
||||||
$route->setMethods($methods);
|
$route->setMethods($methods);
|
||||||
|
$route->setCondition($this->resolve($route->getCondition()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,16 +28,18 @@ class RouterTest extends \PHPUnit_Framework_TestCase
|
|||||||
),
|
),
|
||||||
array(
|
array(
|
||||||
'_locale' => 'en|es',
|
'_locale' => 'en|es',
|
||||||
)
|
), array(), '', array(), array(), '"%foo%" == "bar"'
|
||||||
));
|
));
|
||||||
|
|
||||||
$sc = $this->getServiceContainer($routes);
|
$sc = $this->getServiceContainer($routes);
|
||||||
$sc->setParameter('locale', 'es');
|
$sc->setParameter('locale', 'es');
|
||||||
|
$sc->setParameter('foo', 'bar');
|
||||||
|
|
||||||
$router = new Router($sc, 'foo');
|
$router = new Router($sc, 'foo');
|
||||||
|
|
||||||
$this->assertSame('/en', $router->generate('foo', array('_locale' => 'en')));
|
$this->assertSame('/en', $router->generate('foo', array('_locale' => 'en')));
|
||||||
$this->assertSame('/', $router->generate('foo', array('_locale' => 'es')));
|
$this->assertSame('/', $router->generate('foo', array('_locale' => 'es')));
|
||||||
|
$this->assertSame('"bar" == "bar"', $router->getRouteCollection()->get('foo')->getCondition());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testDefaultsPlaceholders()
|
public function testDefaultsPlaceholders()
|
||||||
|
@ -12,8 +12,9 @@
|
|||||||
<services>
|
<services>
|
||||||
<service id="templating.helper.logout_url" class="%templating.helper.logout_url.class%">
|
<service id="templating.helper.logout_url" class="%templating.helper.logout_url.class%">
|
||||||
<tag name="templating.helper" alias="logout_url" />
|
<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="router" />
|
||||||
|
<argument type="service" id="security.token_storage" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="templating.helper.security" class="%templating.helper.security.class%">
|
<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\DependencyInjection\ContainerInterface;
|
||||||
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderAdapter;
|
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderAdapter;
|
||||||
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
|
use Symfony\Component\Form\Extension\Csrf\CsrfProvider\CsrfProviderInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\RequestStack;
|
||||||
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||||
|
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
|
||||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
||||||
use Symfony\Component\Templating\Helper\Helper;
|
use Symfony\Component\Templating\Helper\Helper;
|
||||||
|
|
||||||
@ -25,20 +27,33 @@ use Symfony\Component\Templating\Helper\Helper;
|
|||||||
*/
|
*/
|
||||||
class LogoutUrlHelper extends Helper
|
class LogoutUrlHelper extends Helper
|
||||||
{
|
{
|
||||||
private $container;
|
private $requestStack;
|
||||||
private $listeners = array();
|
private $listeners = array();
|
||||||
private $router;
|
private $router;
|
||||||
|
private $tokenStorage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param ContainerInterface $container A ContainerInterface instance
|
* @param ContainerInterface|RequestStack $requestStack A ContainerInterface instance or RequestStack
|
||||||
* @param UrlGeneratorInterface $router A Router instance
|
* @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->router = $router;
|
||||||
|
$this->tokenStorage = $tokenStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,7 +79,7 @@ class LogoutUrlHelper extends Helper
|
|||||||
/**
|
/**
|
||||||
* Generates the absolute logout path for the firewall.
|
* 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
|
* @return string The logout path
|
||||||
*/
|
*/
|
||||||
@ -76,7 +91,7 @@ class LogoutUrlHelper extends Helper
|
|||||||
/**
|
/**
|
||||||
* Generates the absolute logout URL for the firewall.
|
* 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
|
* @return string The logout URL
|
||||||
*/
|
*/
|
||||||
@ -88,15 +103,27 @@ class LogoutUrlHelper extends Helper
|
|||||||
/**
|
/**
|
||||||
* Generates the logout URL for the firewall.
|
* 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)
|
* @param bool|string $referenceType The type of reference (one of the constants in UrlGeneratorInterface)
|
||||||
*
|
*
|
||||||
* @return string The logout URL
|
* @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)
|
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)) {
|
if (!array_key_exists($key, $this->listeners)) {
|
||||||
throw new \InvalidArgumentException(sprintf('No LogoutListener found for firewall key "%s".', $key));
|
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();
|
$parameters = null !== $csrfTokenManager ? array($csrfParameter => (string) $csrfTokenManager->getToken($csrfTokenId)) : array();
|
||||||
|
|
||||||
if ('/' === $logoutPath[0]) {
|
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;
|
$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\FormEvents;
|
||||||
use Symfony\Component\Form\FormEvent;
|
use Symfony\Component\Form\FormEvent;
|
||||||
use Symfony\Component\HttpFoundation\RequestStack;
|
use Symfony\Component\HttpFoundation\RequestStack;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\Security\Core\Security;
|
use Symfony\Component\Security\Core\Security;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,7 +74,7 @@ class UserLoginFormType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
/* Note: the form's intention must correspond to that for the form login
|
/* Note: the form's intention must correspond to that for the form login
|
||||||
* listener in order for the CSRF token to validate successfully.
|
* listener in order for the CSRF token to validate successfully.
|
||||||
|
@ -3,4 +3,14 @@
|
|||||||
{% block body %}
|
{% block body %}
|
||||||
Hello {{ app.user.username }}!<br /><br />
|
Hello {{ app.user.username }}!<br /><br />
|
||||||
You're browsing to path "{{ app.request.pathInfo }}".
|
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 %}
|
{% endblock %}
|
||||||
|
@ -36,6 +36,40 @@ class FormLoginTest extends WebTestCase
|
|||||||
$this->assertContains('You\'re browsing to path "/profile".', $text);
|
$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
|
* @dataProvider getConfigs
|
||||||
*/
|
*/
|
||||||
|
@ -23,8 +23,17 @@ security:
|
|||||||
form_login:
|
form_login:
|
||||||
check_path: /login_check
|
check_path: /login_check
|
||||||
default_target_path: /profile
|
default_target_path: /profile
|
||||||
|
logout: ~
|
||||||
anonymous: ~
|
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:
|
access_control:
|
||||||
- { path: ^/unprotected_resource$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
- { path: ^/unprotected_resource$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
|
||||||
- { path: ^/secure-but-not-covered-by-access-control$, 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.
|
* 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
|
* @return string The relative logout URL
|
||||||
*/
|
*/
|
||||||
public function getLogoutPath($key)
|
public function getLogoutPath($key = null)
|
||||||
{
|
{
|
||||||
return $this->helper->getLogoutPath($key);
|
return $this->helper->getLogoutPath($key);
|
||||||
}
|
}
|
||||||
@ -53,11 +53,11 @@ class LogoutUrlExtension extends \Twig_Extension
|
|||||||
/**
|
/**
|
||||||
* Generates the absolute logout URL for the firewall.
|
* 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
|
* @return string The absolute logout URL
|
||||||
*/
|
*/
|
||||||
public function getLogoutUrl($key)
|
public function getLogoutUrl($key = null)
|
||||||
{
|
{
|
||||||
return $this->helper->getLogoutUrl($key);
|
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\Compiler\CompilerPassInterface;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
|
||||||
use Symfony\Component\DependencyInjection\Reference;
|
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'));
|
$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')) {
|
if ($container->has('templating')) {
|
||||||
$container->getDefinition('twig.cache_warmer')->addTag('kernel.cache_warmer');
|
$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">
|
<service id="twig.app_variable" class="Symfony\Bridge\Twig\AppVariable" public="false">
|
||||||
<call method="setEnvironment"><argument>%kernel.environment%</argument></call>
|
<call method="setEnvironment"><argument>%kernel.environment%</argument></call>
|
||||||
<call method="setDebug"><argument>%kernel.debug%</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="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>
|
<call method="setRequestStack"><argument type="service" id="request_stack" on-invalid="ignore" /></call>
|
||||||
</service>
|
</service>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace Symfony\Component\Form;
|
namespace Symfony\Component\Form;
|
||||||
|
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,6 +44,16 @@ abstract class AbstractType implements FormTypeInterface
|
|||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
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;
|
namespace Symfony\Component\Form;
|
||||||
|
|
||||||
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,6 +44,16 @@ abstract class AbstractTypeExtension implements FormTypeExtensionInterface
|
|||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
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
|
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
|
2.6.2
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ use Symfony\Component\Form\AbstractType;
|
|||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulates common logic of {@link FormType} and {@link ButtonType}.
|
* Encapsulates common logic of {@link FormType} and {@link ButtonType}.
|
||||||
@ -111,7 +111,7 @@ abstract class BaseType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'block_name' => null,
|
'block_name' => null,
|
||||||
|
@ -12,14 +12,14 @@
|
|||||||
namespace Symfony\Component\Form\Extension\Core\Type;
|
namespace Symfony\Component\Form\Extension\Core\Type;
|
||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class BirthdayType extends AbstractType
|
class BirthdayType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'years' => range(date('Y') - 120, date('Y')),
|
'years' => range(date('Y') - 120, date('Y')),
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
namespace Symfony\Component\Form\Extension\Core\Type;
|
namespace Symfony\Component\Form\Extension\Core\Type;
|
||||||
|
|
||||||
use Symfony\Component\Form\ButtonTypeInterface;
|
use Symfony\Component\Form\ButtonTypeInterface;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A form button.
|
* A form button.
|
||||||
@ -39,9 +39,9 @@ class ButtonType extends BaseType implements ButtonTypeInterface
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
parent::setDefaultOptions($resolver);
|
parent::configureOptions($resolver);
|
||||||
|
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'auto_initialize' => false,
|
'auto_initialize' => false,
|
||||||
|
@ -16,7 +16,7 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\BooleanToStringTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\BooleanToStringTransformer;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class CheckboxType extends AbstractType
|
class CheckboxType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -49,7 +49,7 @@ class CheckboxType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$emptyData = function (FormInterface $form, $viewData) {
|
$emptyData = function (FormInterface $form, $viewData) {
|
||||||
return $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\ChoicesToValuesTransformer;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\ChoicesToBooleanArrayTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\ChoicesToBooleanArrayTransformer;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class ChoiceType extends AbstractType
|
class ChoiceType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -161,7 +161,7 @@ class ChoiceType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$choiceListCache = & $this->choiceListCache;
|
$choiceListCache = & $this->choiceListCache;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ use Symfony\Component\Form\FormView;
|
|||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener;
|
use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class CollectionType extends AbstractType
|
class CollectionType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -72,7 +72,7 @@ class CollectionType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$optionsNormalizer = function (Options $options, $value) {
|
$optionsNormalizer = function (Options $options, $value) {
|
||||||
$value['block_name'] = 'entry';
|
$value['block_name'] = 'entry';
|
||||||
|
@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Intl\Intl;
|
use Symfony\Component\Intl\Intl;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class CountryType extends AbstractType
|
class CountryType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'choices' => Intl::getRegionBundle()->getCountryNames(),
|
'choices' => Intl::getRegionBundle()->getCountryNames(),
|
||||||
|
@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Intl\Intl;
|
use Symfony\Component\Intl\Intl;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class CurrencyType extends AbstractType
|
class CurrencyType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'choices' => Intl::getCurrencyBundle()->getCurrencyNames(),
|
'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\DateTimeToRfc3339Transformer;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\ArrayToPartsTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\ArrayToPartsTransformer;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class DateTimeType extends AbstractType
|
class DateTimeType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -200,7 +200,7 @@ class DateTimeType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$compound = function (Options $options) {
|
$compound = function (Options $options) {
|
||||||
return $options['widget'] !== 'single_text';
|
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\Extension\Core\DataTransformer\DateTimeToTimestampTransformer;
|
||||||
use Symfony\Component\Form\ReversedTransformer;
|
use Symfony\Component\Form\ReversedTransformer;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
|
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
|
||||||
|
|
||||||
class DateType extends AbstractType
|
class DateType extends AbstractType
|
||||||
@ -165,7 +165,7 @@ class DateType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$compound = function (Options $options) {
|
$compound = function (Options $options) {
|
||||||
return $options['widget'] !== 'single_text';
|
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\AbstractType;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class FileType extends AbstractType
|
class FileType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -47,7 +47,7 @@ class FileType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'compound' => false,
|
'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\Extension\Core\DataMapper\PropertyPathMapper;
|
||||||
use Symfony\Component\Form\Exception\LogicException;
|
use Symfony\Component\Form\Exception\LogicException;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\PropertyAccess\PropertyAccess;
|
use Symfony\Component\PropertyAccess\PropertyAccess;
|
||||||
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
use Symfony\Component\PropertyAccess\PropertyAccessorInterface;
|
||||||
|
|
||||||
@ -122,9 +122,9 @@ class FormType extends BaseType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@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
|
// Derive "data_class" option from passed "data" object
|
||||||
$dataClass = function (Options $options) {
|
$dataClass = function (Options $options) {
|
||||||
|
@ -12,14 +12,14 @@
|
|||||||
namespace Symfony\Component\Form\Extension\Core\Type;
|
namespace Symfony\Component\Form\Extension\Core\Type;
|
||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class HiddenType extends AbstractType
|
class HiddenType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
// hidden fields cannot have a required attribute
|
// 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\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\IntegerToLocalizedStringTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\IntegerToLocalizedStringTransformer;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class IntegerType extends AbstractType
|
class IntegerType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -34,7 +34,7 @@ class IntegerType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
// default precision is locale specific (usually around 3)
|
// 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\Form\AbstractType;
|
||||||
use Symfony\Component\Intl\Intl;
|
use Symfony\Component\Intl\Intl;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class LanguageType extends AbstractType
|
class LanguageType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'choices' => Intl::getLanguageBundle()->getLanguageNames(),
|
'choices' => Intl::getLanguageBundle()->getLanguageNames(),
|
||||||
|
@ -13,14 +13,14 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Intl\Intl;
|
use Symfony\Component\Intl\Intl;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class LocaleType extends AbstractType
|
class LocaleType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'choices' => Intl::getLocaleBundle()->getLocaleNames(),
|
'choices' => Intl::getLocaleBundle()->getLocaleNames(),
|
||||||
|
@ -16,7 +16,7 @@ use Symfony\Component\Form\FormInterface;
|
|||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\MoneyToLocalizedStringTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\MoneyToLocalizedStringTransformer;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class MoneyType extends AbstractType
|
class MoneyType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -48,7 +48,7 @@ class MoneyType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'precision' => 2,
|
'precision' => 2,
|
||||||
|
@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class NumberType extends AbstractType
|
class NumberType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -33,7 +33,7 @@ class NumberType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
// default precision is locale specific (usually around 3)
|
// 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\AbstractType;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class PasswordType extends AbstractType
|
class PasswordType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -31,7 +31,7 @@ class PasswordType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'always_empty' => true,
|
'always_empty' => true,
|
||||||
|
@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\PercentToLocalizedStringTransformer;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class PercentType extends AbstractType
|
class PercentType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -29,7 +29,7 @@ class PercentType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'precision' => 0,
|
'precision' => 0,
|
||||||
|
@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\DataTransformer\ValueToDuplicatesTransformer;
|
use Symfony\Component\Form\Extension\Core\DataTransformer\ValueToDuplicatesTransformer;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class RepeatedType extends AbstractType
|
class RepeatedType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -44,7 +44,7 @@ class RepeatedType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
|
@ -12,14 +12,14 @@
|
|||||||
namespace Symfony\Component\Form\Extension\Core\Type;
|
namespace Symfony\Component\Form\Extension\Core\Type;
|
||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class TextType extends AbstractType
|
class TextType extends AbstractType
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'compound' => false,
|
'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\Extension\Core\DataTransformer\DateTimeToArrayTransformer;
|
||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class TimeType extends AbstractType
|
class TimeType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -157,7 +157,7 @@ class TimeType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$compound = function (Options $options) {
|
$compound = function (Options $options) {
|
||||||
return $options['widget'] !== 'single_text';
|
return $options['widget'] !== 'single_text';
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
namespace Symfony\Component\Form\Extension\Core\Type;
|
namespace Symfony\Component\Form\Extension\Core\Type;
|
||||||
|
|
||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class TimezoneType extends AbstractType
|
class TimezoneType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -26,7 +26,7 @@ class TimezoneType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'choices' => self::getTimezones(),
|
'choices' => self::getTimezones(),
|
||||||
|
@ -14,7 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\Type;
|
|||||||
use Symfony\Component\Form\AbstractType;
|
use Symfony\Component\Form\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener;
|
use Symfony\Component\Form\Extension\Core\EventListener\FixUrlProtocolListener;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class UrlType extends AbstractType
|
class UrlType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -31,7 +31,7 @@ class UrlType extends AbstractType
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'default_protocol' => 'http',
|
'default_protocol' => 'http',
|
||||||
|
@ -21,7 +21,7 @@ use Symfony\Component\Form\FormBuilderInterface;
|
|||||||
use Symfony\Component\Form\FormView;
|
use Symfony\Component\Form\FormView;
|
||||||
use Symfony\Component\Form\FormInterface;
|
use Symfony\Component\Form\FormInterface;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
|
||||||
use Symfony\Component\Translation\TranslatorInterface;
|
use Symfony\Component\Translation\TranslatorInterface;
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ class FormTypeCsrfExtension extends AbstractTypeExtension
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
// BC clause for the "intention" option
|
// BC clause for the "intention" option
|
||||||
$csrfTokenId = function (Options $options) {
|
$csrfTokenId = function (Options $options) {
|
||||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Validator\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\AbstractTypeExtension;
|
use Symfony\Component\Form\AbstractTypeExtension;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encapsulates common logic of {@link FormTypeValidatorExtension} and
|
* Encapsulates common logic of {@link FormTypeValidatorExtension} and
|
||||||
@ -26,7 +26,7 @@ abstract class BaseValidatorExtension extends AbstractTypeExtension
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
// Make sure that validation groups end up as null, closure or array
|
// Make sure that validation groups end up as null, closure or array
|
||||||
$validationGroupsNormalizer = function (Options $options, $groups) {
|
$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\Validator\ValidatorInterface;
|
||||||
use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
|
use Symfony\Component\Validator\ValidatorInterface as LegacyValidatorInterface;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
@ -58,9 +58,9 @@ class FormTypeValidatorExtension extends BaseValidatorExtension
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@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
|
// Constraint should always be converted to an array
|
||||||
$constraintsNormalizer = function (Options $options, $constraints) {
|
$constraintsNormalizer = function (Options $options, $constraints) {
|
||||||
|
@ -13,7 +13,7 @@ namespace Symfony\Component\Form\Extension\Validator\Type;
|
|||||||
|
|
||||||
use Symfony\Component\Form\AbstractTypeExtension;
|
use Symfony\Component\Form\AbstractTypeExtension;
|
||||||
use Symfony\Component\OptionsResolver\Options;
|
use Symfony\Component\OptionsResolver\Options;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
@ -23,7 +23,7 @@ class RepeatedTypeValidatorExtension extends AbstractTypeExtension
|
|||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
// Map errors to the first field
|
// Map errors to the first field
|
||||||
$errorMapping = function (Options $options) {
|
$errorMapping = function (Options $options) {
|
||||||
|
@ -63,6 +63,10 @@ interface FormTypeExtensionInterface
|
|||||||
* Overrides the default options from the extended type.
|
* Overrides the default options from the extended type.
|
||||||
*
|
*
|
||||||
* @param OptionsResolverInterface $resolver The resolver for the options.
|
* @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);
|
public function setDefaultOptions(OptionsResolverInterface $resolver);
|
||||||
|
|
||||||
|
@ -72,6 +72,10 @@ interface FormTypeInterface
|
|||||||
* Sets the default options for this type.
|
* Sets the default options for this type.
|
||||||
*
|
*
|
||||||
* @param OptionsResolverInterface $resolver The resolver for the options.
|
* @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);
|
public function setDefaultOptions(OptionsResolverInterface $resolver);
|
||||||
|
|
||||||
|
@ -205,8 +205,22 @@ class ResolvedFormType implements ResolvedFormTypeInterface
|
|||||||
|
|
||||||
$this->innerType->setDefaultOptions($this->optionsResolver);
|
$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) {
|
foreach ($this->typeExtensions as $extension) {
|
||||||
$extension->setDefaultOptions($this->optionsResolver);
|
$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\AbstractType;
|
||||||
use Symfony\Component\Form\FormBuilderInterface;
|
use Symfony\Component\Form\FormBuilderInterface;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
class AuthorType extends AbstractType
|
class AuthorType extends AbstractType
|
||||||
{
|
{
|
||||||
@ -21,7 +21,7 @@ class AuthorType extends AbstractType
|
|||||||
return 'author';
|
return 'author';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setDefaultOptions(OptionsResolverInterface $resolver)
|
public function configureOptions(OptionsResolver $resolver)
|
||||||
{
|
{
|
||||||
$resolver->setDefaults(array(
|
$resolver->setDefaults(array(
|
||||||
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
|
'data_class' => 'Symfony\Component\Form\Tests\Fixtures\Author',
|
||||||
|
@ -12,9 +12,8 @@
|
|||||||
namespace Symfony\Component\Form\Tests;
|
namespace Symfony\Component\Form\Tests;
|
||||||
|
|
||||||
use Symfony\Component\Form\ResolvedFormType;
|
use Symfony\Component\Form\ResolvedFormType;
|
||||||
use Symfony\Component\Form\FormView;
|
|
||||||
use Symfony\Component\Form\FormBuilder;
|
use Symfony\Component\Form\FormBuilder;
|
||||||
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
@ -60,7 +59,7 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
|
|||||||
$i = 0;
|
$i = 0;
|
||||||
|
|
||||||
$assertIndexAndAddOption = function ($index, $option, $default) use (&$i) {
|
$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);
|
$this->assertEquals($index, $i, 'Executed at index '.$index);
|
||||||
|
|
||||||
++$i;
|
++$i;
|
||||||
@ -71,21 +70,21 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
// First the default options are generated for the super type
|
// First the default options are generated for the super type
|
||||||
$this->parentType->expects($this->once())
|
$this->parentType->expects($this->once())
|
||||||
->method('setDefaultOptions')
|
->method('configureOptions')
|
||||||
->will($this->returnCallback($assertIndexAndAddOption(0, 'a', 'a_default')));
|
->will($this->returnCallback($assertIndexAndAddOption(0, 'a', 'a_default')));
|
||||||
|
|
||||||
// The form type itself
|
// The form type itself
|
||||||
$this->type->expects($this->once())
|
$this->type->expects($this->once())
|
||||||
->method('setDefaultOptions')
|
->method('configureOptions')
|
||||||
->will($this->returnCallback($assertIndexAndAddOption(1, 'b', 'b_default')));
|
->will($this->returnCallback($assertIndexAndAddOption(1, 'b', 'b_default')));
|
||||||
|
|
||||||
// And its extensions
|
// And its extensions
|
||||||
$this->extension1->expects($this->once())
|
$this->extension1->expects($this->once())
|
||||||
->method('setDefaultOptions')
|
->method('configureOptions')
|
||||||
->will($this->returnCallback($assertIndexAndAddOption(2, 'c', 'c_default')));
|
->will($this->returnCallback($assertIndexAndAddOption(2, 'c', 'c_default')));
|
||||||
|
|
||||||
$this->extension2->expects($this->once())
|
$this->extension2->expects($this->once())
|
||||||
->method('setDefaultOptions')
|
->method('configureOptions')
|
||||||
->will($this->returnCallback($assertIndexAndAddOption(3, 'd', 'd_default')));
|
->will($this->returnCallback($assertIndexAndAddOption(3, 'd', 'd_default')));
|
||||||
|
|
||||||
$givenOptions = array('a' => 'a_custom', 'c' => 'c_custom');
|
$givenOptions = array('a' => 'a_custom', 'c' => 'c_custom');
|
||||||
@ -303,7 +302,7 @@ class ResolvedFormTypeTest extends \PHPUnit_Framework_TestCase
|
|||||||
*/
|
*/
|
||||||
private function getMockFormType()
|
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()
|
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;
|
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.
|
* 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
|
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;
|
namespace Symfony\Component\Validator\Mapping;
|
||||||
|
|
||||||
use Symfony\Component\Validator\Mapping\Deprecated\TraversalStrategy as Deprecated;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies whether and how a traversable object should be traversed.
|
* Specifies whether and how a traversable object should be traversed.
|
||||||
*
|
*
|
||||||
@ -57,7 +55,7 @@ class TraversalStrategy
|
|||||||
*
|
*
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
const STOP_RECURSION = Deprecated::STOP_RECURSION;
|
const STOP_RECURSION = 8;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Not instantiable.
|
* Not instantiable.
|
||||||
|
Reference in New Issue
Block a user