get('config'); if (! isset($config['session_config']) || ! is_array($config['session_config'])) { throw new ServiceNotCreatedException( 'Configuration is missing a "session_config" key, or the value of that key is not an array' ); } $class = SessionConfig::class; $config = $config['session_config']; if (isset($config['config_class'])) { if (! class_exists($config['config_class'])) { throw new ServiceNotCreatedException(sprintf( 'Invalid configuration class "%s" specified in "config_class" session configuration; ' . 'must be a valid class', $config['config_class'] )); } $class = $config['config_class']; unset($config['config_class']); } $sessionConfig = new $class(); if (! $sessionConfig instanceof ConfigInterface) { throw new ServiceNotCreatedException(sprintf( 'Invalid configuration class "%s" specified in "config_class" session configuration; must implement %s', $class, ConfigInterface::class )); } if ( isset($config['cookie_samesite']) && ! $sessionConfig instanceof SameSiteCookieCapableInterface ) { throw new ServiceNotCreatedException(sprintf( 'Invalid configuration class "%s". When configuration option "cookie_samesite" is used,' . ' the configuration class must implement %s', $class, SameSiteCookieCapableInterface::class )); } $sessionConfig->setOptions($config); return $sessionConfig; } /** * Create and return a config instance (v2 usage). * * @param null|string $canonicalName * @param string $requestedName * @return ConfigInterface */ public function createService( ServiceLocatorInterface $services, $canonicalName = null, $requestedName = ConfigInterface::class ) { return $this($services, $requestedName); } }