From 0687aadad2aecdd42990542b53eca471fe3b29bf Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 18 May 2011 12:54:16 +0200 Subject: [PATCH] fixed form configuration when no session is available (closes #841) --- .../FrameworkExtension.php | 32 +++++++++++++------ .../FrameworkBundle/Resources/config/form.xml | 22 +++---------- .../Resources/config/form_csrf.xml | 27 ++++++++++++++++ 3 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Resources/config/form_csrf.xml diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index c00042785194..fc342a3294bc 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -41,7 +41,6 @@ public function load(array $configs, ContainerBuilder $container) $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 @@ public function load(array $configs, ContainerBuilder $container) $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 @@ public function load(array $configs, ContainerBuilder $container) } /** - * 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'); + } } /** diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml index e325d2916e3b..93ab5530bb80 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form.xml @@ -8,8 +8,8 @@ Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension Symfony\Component\Form\FormFactory Symfony\Component\Form\Extension\Validator\ValidatorTypeGuesser - Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider - Symfony\Component\HttpFoundation\File\SessionBasedTemporaryStorage + Symfony\Component\HttpFoundation\File\TemporaryStorage + Symfony\Component\HttpFoundation\File\SessionBasedTemporaryStorage @@ -51,15 +51,14 @@ - - + + %kernel.secret% + %kernel.cache_dir%/upload - - %kernel.secret% %kernel.cache_dir%/upload @@ -151,16 +150,5 @@ - - - - - - - - - %form.type_extension.csrf.enabled% - %form.type_extension.csrf.field_name% - diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_csrf.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_csrf.xml new file mode 100644 index 000000000000..188a099df29a --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/form_csrf.xml @@ -0,0 +1,27 @@ + + + + + + Symfony\Component\Form\Extension\Csrf\CsrfProvider\SessionCsrfProvider + + + + + + %kernel.secret% + + + + + + + + + %form.type_extension.csrf.enabled% + %form.type_extension.csrf.field_name% + + +