Переглянути джерело

refactored session configuration

The configuration names have been changed to avoid confusion (user was
ambiguous)

    Before:
          <app:user default_locale="fr">
              <app:session name="SYMFONY" type="Native" lifetime="3600" />
          </app:user>

    After:
          <app:session default_locale="fr" name="SYMFONY" storage_id="native" lifetime="3600" />
Fabien Potencier 14 роки тому
батько
коміт
51a3d0ba6a

+ 13 - 14
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

@@ -111,8 +111,8 @@ class FrameworkExtension extends Extension
             $this->registerTestConfiguration($config, $container);
         }
 
-        if (isset($config['user'])) {
-            $this->registerUserConfiguration($config, $container);
+        if (isset($config['session'])) {
+            $this->registerSessionConfiguration($config, $container);
         }
 
         $this->registerTranslatorConfiguration($config, $container);
@@ -303,9 +303,9 @@ class FrameworkExtension extends Extension
      * @param array            $config    A configuration array
      * @param ContainerBuilder $container A ContainerBuilder instance
      */
-    protected function registerUserConfiguration($config, ContainerBuilder $container)
+    protected function registerSessionConfiguration($config, ContainerBuilder $container)
     {
-        $config = $config['user'];
+        $config = $config['session'];
 
         if (!$container->hasDefinition('session')) {
             $loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
@@ -322,20 +322,19 @@ class FrameworkExtension extends Extension
             $container->setParameter('session.class', $config['class']);
         }
 
-        foreach (array('name', 'lifetime', 'path', 'domain', 'secure', 'httponly', 'cache_limiter', 'cache-limiter', 'pdo.db_table') as $name) {
-            if (isset($config['session'][$name])) {
-                $container->setParameter('session.options.'.$name, $config['session'][$name]);
-            }
+        if (isset($config['storage_id'])) {
+            $container->setAlias('session.storage', 'session.storage.'.$config['storage_id']);
+        } else {
+            $config['storage_id'] = 'native';
         }
 
-        if (isset($config['session']['class'])) {
-            $class = $config['session']['class'];
-            if (in_array($class, array('Native', 'Pdo'))) {
-                $class = 'Symfony\\Component\\HttpFoundation\\SessionStorage\\'.$class.'SessionStorage';
+        $options = $container->getParameter('session.storage.'.strtolower($config['storage_id']).'.options');
+        foreach (array('name', 'lifetime', 'path', 'domain', 'secure', 'httponly', 'cache_limiter', 'cache-limiter', 'pdo.db_table') as $name) {
+            if (isset($config['session'][$name])) {
+                $options[$name] = $config['session'][$name];
             }
-
-            $container->setParameter('session.session', 'session.session.'.strtolower($class));
         }
+        $container->setParameter('session.storage.'.strtolower($config['storage_id']).'.options', $options);
     }
 
     protected function registerRouterConfiguration($config, ContainerBuilder $container)

+ 4 - 12
src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

@@ -12,7 +12,7 @@
             <xsd:element name="router" type="router" minOccurs="0" maxOccurs="1" />
             <xsd:element name="validation" type="validation" minOccurs="0" maxOccurs="1" />
             <xsd:element name="profiler" type="profiler" minOccurs="0" maxOccurs="1" />
-            <xsd:element name="user" type="user" minOccurs="0" maxOccurs="1" />
+            <xsd:element name="session" type="session" minOccurs="0" maxOccurs="1" />
             <xsd:element name="templating" type="templating" minOccurs="0" maxOccurs="1" />
             <xsd:element name="translator" type="translator" minOccurs="0" maxOccurs="1" />
         </xsd:sequence>
@@ -44,25 +44,17 @@
         <xsd:attribute name="annotations" type="xsd:boolean" />
     </xsd:complexType>
 
-    <xsd:complexType name="user">
-        <xsd:sequence>
-            <xsd:element name="session" type="session" minOccurs="0" maxOccurs="1" />
-        </xsd:sequence>
-
-        <xsd:attribute name="class" type="xsd:string" />
-        <xsd:attribute name="default_locale" type="xsd:string" />
-    </xsd:complexType>
-
     <xsd:complexType name="session">
         <xsd:attribute name="class" type="xsd:string" />
+        <xsd:attribute name="storage_id" type="xsd:string" />
+        <xsd:attribute name="default_locale" type="xsd:string" />
         <xsd:attribute name="name" type="xsd:string" />
-        <xsd:attribute name="type" type="xsd:string" />
         <xsd:attribute name="lifetime" type="xsd:integer" />
         <xsd:attribute name="path" type="xsd:string" />
         <xsd:attribute name="domain" type="xsd:string" />
         <xsd:attribute name="secure" type="xsd:string" />
         <xsd:attribute name="httponly" type="xsd:string" />
-        <xsd:attribute name="cache_limiter" type="xsd:string" />
+        <xsd:attribute name="cache-limiter" type="xsd:string" />
         <xsd:attribute name="pdo.db_table" type="xsd:string" />
     </xsd:complexType>
 

+ 6 - 29
src/Symfony/Bundle/FrameworkBundle/Resources/config/session.xml

@@ -7,16 +7,10 @@
     <parameters>
         <parameter key="session.class">Symfony\Component\HttpFoundation\Session</parameter>
         <parameter key="session.default_locale">en</parameter>
-        <parameter key="session.storage.class">Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage</parameter>
+        <parameter key="session.storage.native.class">Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage</parameter>
+        <parameter key="session.storage.native.options" type="collection" />
         <parameter key="session.storage.pdo.class">Symfony\Component\HttpFoundation\SessionStorage\PdoSessionStorage</parameter>
-        <parameter key="session.options.name">SYMFONY_SESSION</parameter>
-        <parameter key="session.options.lifetime">false</parameter>
-        <parameter key="session.options.path">/</parameter>
-        <parameter key="session.options.domain" />
-        <parameter key="session.options.secure">false</parameter>
-        <parameter key="session.options.httponly">false</parameter>
-        <parameter key="session.options.cache_limiter">none</parameter>
-        <parameter key="session.options.pdo.db_table">session</parameter>
+        <parameter key="session.storage.pdo.options" type="collection" />
     </parameters>
 
     <services>
@@ -27,30 +21,13 @@
             </argument>
         </service>
 
-        <service id="session.storage.native" class="%session.storage.class%">
-            <argument type="collection">
-                <argument key="session_name">%session.options.name%</argument>
-                <argument key="session_cookie_lifetime">%session.options.lifetime%</argument>
-                <argument key="session_cookie_path">%session.options.path%</argument>
-                <argument key="session_cookie_domain">%session.options.domain%</argument>
-                <argument key="session_cookie_secure">%session.options.secure%</argument>
-                <argument key="session_cookie_httponly">%session.options.httponly%</argument>
-                <argument key="session_cache_limiter">%session.options.cache_limiter%</argument>
-            </argument>
+        <service id="session.storage.native" class="%session.storage.native.class%">
+            <argument>%session.storage.native.options%</argument>
         </service>
 
         <service id="session.storage.pdo" class="%session.storage.pdo.class%">
             <argument type="service" id="pdo_connection" />
-            <argument type="collection">
-                <argument key="session_name">%session.options.name%</argument>
-                <argument key="session_cookie_lifetime">%session.options.lifetime%</argument>
-                <argument key="session_cookie_path">%session.options.path%</argument>
-                <argument key="session_cookie_domain">%session.options.domain%</argument>
-                <argument key="session_cookie_secure">%session.options.secure%</argument>
-                <argument key="session_cookie_httponly">%session.options.httponly%</argument>
-                <argument key="session_cache_limiter">%session.options.cache_limiter%</argument>
-                <argument key="db_table">%session.options.pdo.db_table%</argument>
-            </argument>
+            <argument>%session.storage.pdo.options%</argument>
         </service>
 
         <service id="session.storage" alias="session.storage.native" />

+ 2 - 2
src/Symfony/Component/HttpFoundation/SessionStorage/NativeSessionStorage.php

@@ -26,7 +26,7 @@ class NativeSessionStorage implements SessionStorageInterface
     /**
      * Available options:
      *
-     *  * session_name:            The cookie name (symfony by default)
+     *  * session_name:            The cookie name (_SESSION by default)
      *  * session_id:              The session id (null by default)
      *  * session_cookie_lifetime: Cookie lifetime
      *  * session_cookie_path:     Cookie path
@@ -44,7 +44,7 @@ class NativeSessionStorage implements SessionStorageInterface
         $cookieDefaults = session_get_cookie_params();
 
         $this->options = array_merge(array(
-            'session_name'            => 'SYMFONY_SESSION',
+            'session_name'            => '_SESSION',
             'session_cookie_lifetime' => $cookieDefaults['lifetime'],
             'session_cookie_path'     => $cookieDefaults['path'],
             'session_cookie_domain'   => $cookieDefaults['domain'],