fixed form configuration when no session is available (closes #841)
This commit is contained in:
parent
fdbdcbbd0a
commit
0687aadad2
@ -41,7 +41,6 @@ class FrameworkExtension extends Extension
|
||||
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
|
||||
$loader->load('web.xml');
|
||||
$loader->load('form.xml');
|
||||
$loader->load('services.xml');
|
||||
|
||||
// A translator must always be registered (as support is included by
|
||||
@ -70,9 +69,7 @@ class FrameworkExtension extends Extension
|
||||
$loader->load('test.xml');
|
||||
}
|
||||
|
||||
if (isset($config['csrf_protection'])) {
|
||||
$this->registerCsrfProtectionConfiguration($config['csrf_protection'], $container);
|
||||
}
|
||||
$this->registerFormConfiguration($config, $container, $loader);
|
||||
|
||||
if (isset($config['esi'])) {
|
||||
$this->registerEsiConfiguration($config['esi'], $loader);
|
||||
@ -135,15 +132,32 @@ class FrameworkExtension extends Extension
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the CSRF protection configuration.
|
||||
* Loads Form configuration.
|
||||
*
|
||||
* @param array $config A CSRF protection configuration array
|
||||
* @param array $config A configuration array
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param XmlFileLoader $loader An XmlFileLoader instance
|
||||
*/
|
||||
private function registerCsrfProtectionConfiguration(array $config, ContainerBuilder $container)
|
||||
private function registerFormConfiguration($config, ContainerBuilder $container, XmlFileLoader $loader)
|
||||
{
|
||||
$container->setParameter('form.type_extension.csrf.enabled', $config['enabled']);
|
||||
$container->setParameter('form.type_extension.csrf.field_name', $config['field_name']);
|
||||
$loader->load('form.xml');
|
||||
if (isset($config['csrf_protection'])) {
|
||||
if (!isset($config['session'])) {
|
||||
throw new \LogicException('CSRF protection needs that sessions are enabled.');
|
||||
}
|
||||
$loader->load('form_csrf.xml');
|
||||
|
||||
$container->setParameter('form.type_extension.csrf.enabled', $config['csrf_protection']['enabled']);
|
||||
$container->setParameter('form.type_extension.csrf.field_name', $config['csrf_protection']['field_name']);
|
||||
}
|
||||
|
||||
if (isset($config['session'])) {
|
||||
$container->removeDefinition('file.temporary_storage');
|
||||
$container->setDefinition('file.temporary_storage', $container->getDefinition('file.temporary_storage.session'));
|
||||
$container->removeDefinition('file.temporary_storage.session');
|
||||
} else {
|
||||
$container->removeDefinition('file.temporary_storage.session');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -8,8 +8,8 @@
|
||||
<parameter key="form.extension.class">Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension</parameter>
|
||||
<parameter key="form.factory.class">Symfony\Component\Form\FormFactory</parameter>
|
||||
<parameter key="form.type_guesser.validator.class">Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser</parameter>
|
||||
<parameter key="form.csrf_provider.class">Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider</parameter>
|
||||
<parameter key="file.temporary_storage.class">Symfony\Component\HttpFoundation\File\SessionBasedTemporaryStorage</parameter>
|
||||
<parameter key="file.temporary_storage.class">Symfony\Component\HttpFoundation\File\TemporaryStorage</parameter>
|
||||
<parameter key="file.temporary_storage.session.class">Symfony\Component\HttpFoundation\File\SessionBasedTemporaryStorage</parameter>
|
||||
</parameters>
|
||||
|
||||
<services>
|
||||
@ -51,15 +51,14 @@
|
||||
<argument type="service" id="validator.mapping.class_metadata_factory" />
|
||||
</service>
|
||||
|
||||
<!-- CsrfProvider -->
|
||||
<service id="form.csrf_provider" class="%form.csrf_provider.class%">
|
||||
<!-- TemporaryStorage - where should we put this? -->
|
||||
<service id="file.temporary_storage.session" class="%file.temporary_storage.session.class%">
|
||||
<argument type="service" id="session" />
|
||||
<argument>%kernel.secret%</argument>
|
||||
<argument>%kernel.cache_dir%/upload</argument>
|
||||
</service>
|
||||
|
||||
<!-- TemporaryStorage - where should we put this? -->
|
||||
<service id="file.temporary_storage" class="%file.temporary_storage.class%">
|
||||
<argument type="service" id="session" />
|
||||
<argument>%kernel.secret%</argument>
|
||||
<argument>%kernel.cache_dir%/upload</argument>
|
||||
</service>
|
||||
@ -151,16 +150,5 @@
|
||||
<tag name="form.type_extension" alias="field" />
|
||||
<argument type="service" id="validator" />
|
||||
</service>
|
||||
|
||||
<!-- CsrfExtension -->
|
||||
<service id="form.type.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\CsrfType">
|
||||
<tag name="form.type" alias="csrf" />
|
||||
<argument type="service" id="form.csrf_provider" />
|
||||
</service>
|
||||
<service id="form.type_extension.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension">
|
||||
<tag name="form.type_extension" alias="form" />
|
||||
<argument>%form.type_extension.csrf.enabled%</argument>
|
||||
<argument>%form.type_extension.csrf.field_name%</argument>
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
||||
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" ?>
|
||||
|
||||
<container xmlns="http://symfony.com/schema/dic/services"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
|
||||
|
||||
<parameters>
|
||||
<parameter key="form.csrf_provider.class">Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider</parameter>
|
||||
</parameters>
|
||||
|
||||
<services>
|
||||
<service id="form.csrf_provider" class="%form.csrf_provider.class%">
|
||||
<argument type="service" id="session" />
|
||||
<argument>%kernel.secret%</argument>
|
||||
</service>
|
||||
|
||||
<service id="form.type.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\CsrfType">
|
||||
<tag name="form.type" alias="csrf" />
|
||||
<argument type="service" id="form.csrf_provider" />
|
||||
</service>
|
||||
<service id="form.type_extension.csrf" class="Symfony\Component\Form\Extension\Csrf\Type\FormTypeCsrfExtension">
|
||||
<tag name="form.type_extension" alias="form" />
|
||||
<argument>%form.type_extension.csrf.enabled%</argument>
|
||||
<argument>%form.type_extension.csrf.field_name%</argument>
|
||||
</service>
|
||||
</services>
|
||||
</container>
|
Reference in New Issue
Block a user