Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Config.php
Go to the documentation of this file.
1 <?php
9 
14 
20 class Config implements ConfigInterface
21 {
23  const PARAM_SESSION_SAVE_METHOD = 'session/save';
24 
26  const PARAM_SESSION_SAVE_PATH = 'session/save_path';
27 
29  const PARAM_SESSION_CACHE_LIMITER = 'session/cache_limiter';
30 
32  const XML_PATH_COOKIE_DOMAIN = 'web/cookie/cookie_domain';
33 
35  const XML_PATH_COOKIE_LIFETIME = 'web/cookie/cookie_lifetime';
36 
38  const XML_PATH_COOKIE_HTTPONLY = 'web/cookie/cookie_httponly';
39 
41  const XML_PATH_COOKIE_PATH = 'web/cookie/cookie_path';
42 
45 
51  protected $options = [];
52 
56  protected $_scopeConfig;
57 
61  protected $_stringHelper;
62 
66  protected $_httpRequest;
67 
73  protected $booleanOptions = [
74  'session.use_cookies',
75  'session.use_only_cookies',
76  'session.use_trans_sid',
77  'session.cookie_httponly',
78  ];
79 
83  protected $_scopeType;
84 
88  protected $lifetimePath;
89 
93  protected $_validatorFactory;
94 
106  public function __construct(
107  \Magento\Framework\ValidatorFactory $validatorFactory,
108  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
109  \Magento\Framework\Stdlib\StringUtils $stringHelper,
110  \Magento\Framework\App\RequestInterface $request,
113  $scopeType,
114  $lifetimePath = self::XML_PATH_COOKIE_LIFETIME
115  ) {
116  $this->_validatorFactory = $validatorFactory;
117  $this->_scopeConfig = $scopeConfig;
118  $this->_stringHelper = $stringHelper;
119  $this->_httpRequest = $request;
120  $this->_scopeType = $scopeType;
121  $this->lifetimePath = $lifetimePath;
122 
126  $savePath = $deploymentConfig->get(self::PARAM_SESSION_SAVE_PATH);
127  if (!$savePath && !ini_get('session.save_path')) {
128  $sessionDir = $filesystem->getDirectoryWrite(DirectoryList::SESSION);
129  $savePath = $sessionDir->getAbsolutePath();
130  $sessionDir->create();
131  }
132  if ($savePath) {
133  $this->setSavePath($savePath);
134  }
135 
139  $saveHandler = $deploymentConfig->get(self::PARAM_SESSION_SAVE_METHOD);
140  if ($saveHandler) {
141  $this->setOption('session.save_handler', $saveHandler);
142  }
143 
147  $cacheLimiter = $deploymentConfig->get(self::PARAM_SESSION_CACHE_LIMITER);
148  if ($cacheLimiter) {
149  $this->setOption('session.cache_limiter', $cacheLimiter);
150  }
151 
155  $lifetime = $this->_scopeConfig->getValue($this->lifetimePath, $this->_scopeType);
156  $this->setCookieLifetime($lifetime, self::COOKIE_LIFETIME_DEFAULT);
157 
158  $path = $this->_scopeConfig->getValue(self::XML_PATH_COOKIE_PATH, $this->_scopeType);
159  $path = empty($path) ? $this->_httpRequest->getBasePath() : $path;
160  $this->setCookiePath($path, $this->_httpRequest->getBasePath());
161 
162  $domain = $this->_scopeConfig->getValue(self::XML_PATH_COOKIE_DOMAIN, $this->_scopeType);
163  $domain = empty($domain) ? $this->_httpRequest->getHttpHost() : $domain;
164  $this->setCookieDomain((string)$domain, $this->_httpRequest->getHttpHost());
165 
166  $this->setCookieHttpOnly(
167  $this->_scopeConfig->getValue(self::XML_PATH_COOKIE_HTTPONLY, $this->_scopeType)
168  );
169 
170  $secureURL = $this->_scopeConfig->getValue('web/secure/base_url', $this->_scopeType);
171  $unsecureURL = $this->_scopeConfig->getValue('web/unsecure/base_url', $this->_scopeType);
172  $isFullySecuredURL = $secureURL == $unsecureURL;
173  $this->setCookieSecure($isFullySecuredURL && $this->_httpRequest->isSecure());
174  }
175 
183  public function setOptions($options, $default = [])
184  {
185  $options = (!is_array($options) && !$options instanceof \Traversable) ? $default : $options;
186  if (is_array($options) || $options instanceof \Traversable) {
187  foreach ($options as $option => $value) {
188  $setter = 'set' . $this->_stringHelper->upperCaseWords($option, '_', '');
189  if (method_exists($this, $setter)) {
190  $this->{$setter}($value);
191  } else {
192  $this->setOption($option, $value);
193  }
194  }
195  }
196  return $this;
197  }
198 
204  public function getOptions()
205  {
206  return $this->options;
207  }
208 
216  public function setOption($option, $value)
217  {
219  $this->options[$option] = $value;
220 
221  return $this;
222  }
223 
230  public function getOption($option)
231  {
233  if (array_key_exists($option, $this->options)) {
234  return $this->options[$option];
235  }
236 
237  $value = $this->getStorageOption($option);
238  if (null !== $value) {
239  $this->options[$option] = $value;
240  return $value;
241  }
242 
243  return null;
244  }
245 
251  public function toArray()
252  {
253  return $this->getOptions();
254  }
255 
263  public function setName($name, $default = null)
264  {
265  $name = (string)$name;
266  $name = empty($name) ? $default : $name;
267  if (!empty($name)) {
268  $this->setOption('session.name', $name);
269  }
270 
271  return $this;
272  }
273 
279  public function getName()
280  {
281  return (string)$this->getOption('session.name');
282  }
283 
290  public function setSavePath($savePath)
291  {
292  $this->setOption('session.save_path', $savePath);
293  return $this;
294  }
295 
301  public function getSavePath()
302  {
303  return (string)$this->getOption('session.save_path');
304  }
305 
313  public function setCookieLifetime($cookieLifetime, $default = null)
314  {
315  $validator = $this->_validatorFactory->create(
316  [],
317  \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator::class
318  );
319  if ($validator->isValid($cookieLifetime)) {
320  $this->setOption('session.cookie_lifetime', (int)$cookieLifetime);
321  } elseif (null !== $default && $validator->isValid($default)) {
322  $this->setOption('session.cookie_lifetime', (int)$default);
323  }
324 
325  return $this;
326  }
327 
333  public function getCookieLifetime()
334  {
335  return (int)$this->getOption('session.cookie_lifetime');
336  }
337 
345  public function setCookiePath($cookiePath, $default = null)
346  {
347  $cookiePath = (string)$cookiePath;
348  $validator = $this->_validatorFactory->create(
349  [],
350  \Magento\Framework\Session\Config\Validator\CookiePathValidator::class
351  );
352  if ($validator->isValid($cookiePath)) {
353  $this->setOption('session.cookie_path', $cookiePath);
354  } elseif (null !== $default && $validator->isValid($default)) {
355  $this->setOption('session.cookie_path', $default);
356  }
357 
358  return $this;
359  }
360 
366  public function getCookiePath()
367  {
368  return (string)$this->getOption('session.cookie_path');
369  }
370 
378  public function setCookieDomain($cookieDomain, $default = null)
379  {
380  $validator = $this->_validatorFactory->create(
381  [],
382  \Magento\Framework\Session\Config\Validator\CookieDomainValidator::class
383  );
384  if ($validator->isValid($cookieDomain)) {
385  $this->setOption('session.cookie_domain', $cookieDomain);
386  } elseif (null !== $default && $validator->isValid($default)) {
387  $this->setOption('session.cookie_domain', $default);
388  }
389 
390  return $this;
391  }
392 
398  public function getCookieDomain()
399  {
400  return (string)$this->getOption('session.cookie_domain');
401  }
402 
409  public function setCookieSecure($cookieSecure)
410  {
411  $this->setOption('session.cookie_secure', (bool)$cookieSecure);
412  return $this;
413  }
414 
421  public function getCookieSecure()
422  {
423  return (bool)$this->getOption('session.cookie_secure');
424  }
425 
432  public function setCookieHttpOnly($cookieHttpOnly)
433  {
434  $this->setOption('session.cookie_httponly', (bool)$cookieHttpOnly);
435  return $this;
436  }
437 
444  public function getCookieHttpOnly()
445  {
446  return (bool)$this->getOption('session.cookie_httponly');
447  }
448 
455  public function setUseCookies($useCookies)
456  {
457  $this->setOption('session.use_cookies', (bool)$useCookies);
458  return $this;
459  }
460 
467  public function getUseCookies()
468  {
469  return (bool)$this->getOption('session.use_cookies');
470  }
471 
478  protected function getStorageOption($option)
479  {
481  if (in_array($option, $this->booleanOptions)) {
482  $value = (bool)$value;
483  }
484 
485  return $value;
486  }
487 
494  protected function getFixedOptionName($option)
495  {
496  $option = strtolower($option);
497 
498  switch ($option) {
499  case 'url_rewriter_tags':
500  $option = 'url_rewriter.tags';
501  break;
502  default:
503  if (strpos($option, 'session.') !== 0) {
504  $option = 'session.' . $option;
505  }
506  break;
507  }
508 
509  return $option;
510  }
511 
523  public function __call($method, $args)
524  {
525  $prefix = substr($method, 0, 3);
526  $option = substr($method, 3);
527  $key = strtolower(preg_replace('#(?<=[a-z])([A-Z])#', '_\1', $option));
528 
529  if ($prefix === 'set') {
530  $value = array_shift($args);
531  return $this->setOption($key, $value);
532  } elseif ($prefix === 'get') {
533  return $this->getOption($key);
534  } else {
535  throw new \BadMethodCallException(sprintf('Method "%s" does not exist in %s', $method, get_class($this)));
536  }
537  }
538 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
setCookiePath($cookiePath, $default=null)
Definition: Config.php:345
setName($name, $default=null)
Definition: Config.php:263
setCookieDomain($cookieDomain, $default=null)
Definition: Config.php:378
setCookieLifetime($cookieLifetime, $default=null)
Definition: Config.php:313
$deploymentConfig
setCookieSecure($cookieSecure)
Definition: Config.php:409
$prefix
Definition: name.phtml:25
$value
Definition: gender.phtml:16
__construct(\Magento\Framework\ValidatorFactory $validatorFactory, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig, \Magento\Framework\Stdlib\StringUtils $stringHelper, \Magento\Framework\App\RequestInterface $request, Filesystem $filesystem, DeploymentConfig $deploymentConfig, $scopeType, $lifetimePath=self::XML_PATH_COOKIE_LIFETIME)
Definition: Config.php:106
$method
Definition: info.phtml:13
setCookieHttpOnly($cookieHttpOnly)
Definition: Config.php:432
$filesystem
setOption($option, $value)
Definition: Config.php:216
setOptions($options, $default=[])
Definition: Config.php:183
if(!isset($_GET['name'])) $name
Definition: log.php:14