Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Cache.php
Go to the documentation of this file.
1 <?php
8 
16 
21 {
22  const INPUT_VALUE_CACHE_REDIS = 'redis';
23  const CONFIG_VALUE_CACHE_REDIS = 'Cm_Cache_Backend_Redis';
24 
25  const INPUT_KEY_CACHE_BACKEND = 'cache-backend';
26  const INPUT_KEY_CACHE_BACKEND_REDIS_SERVER = 'cache-backend-redis-server';
27  const INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE = 'cache-backend-redis-db';
28  const INPUT_KEY_CACHE_BACKEND_REDIS_PORT = 'cache-backend-redis-port';
29  const INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD = 'cache-backend-redis-password';
30 
31  const CONFIG_PATH_CACHE_BACKEND = 'cache/frontend/default/backend';
32  const CONFIG_PATH_CACHE_BACKEND_SERVER = 'cache/frontend/default/backend_options/server';
33  const CONFIG_PATH_CACHE_BACKEND_DATABASE = 'cache/frontend/default/backend_options/database';
34  const CONFIG_PATH_CACHE_BACKEND_PORT = 'cache/frontend/default/backend_options/port';
35  const CONFIG_PATH_CACHE_BACKEND_PASSWORD = 'cache/frontend/default/backend_options/password';
36 
40  private $defaultConfigValues = [
41  self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER => '127.0.0.1',
42  self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE => '0',
43  self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT => '6379',
44  self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => ''
45  ];
46 
50  private $validBackendCacheOptions = [
52  ];
53 
57  private $inputKeyToConfigPathMap = [
58  self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER => self::CONFIG_PATH_CACHE_BACKEND_SERVER,
59  self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE => self::CONFIG_PATH_CACHE_BACKEND_DATABASE,
60  self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT => self::CONFIG_PATH_CACHE_BACKEND_PORT,
61  self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_CACHE_BACKEND_PASSWORD
62  ];
63 
67  private $redisValidator;
68 
74  public function __construct(RedisConnectionValidator $redisValidator)
75  {
76  $this->redisValidator = $redisValidator;
77  }
78 
82  public function getOptions()
83  {
84  return [
86  self::INPUT_KEY_CACHE_BACKEND,
88  $this->validBackendCacheOptions,
89  self::CONFIG_PATH_CACHE_BACKEND,
90  'Default cache handler'
91  ),
92  new TextConfigOption(
93  self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER,
95  self::CONFIG_PATH_CACHE_BACKEND_SERVER,
96  'Redis server'
97  ),
98  new TextConfigOption(
99  self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE,
101  self::CONFIG_PATH_CACHE_BACKEND_DATABASE,
102  'Database number for the cache'
103  ),
104  new TextConfigOption(
105  self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT,
107  self::CONFIG_PATH_CACHE_BACKEND_PORT,
108  'Redis server listen port'
109  ),
110  new TextConfigOption(
111  self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD,
113  self::CONFIG_PATH_CACHE_BACKEND_PASSWORD,
114  'Redis server password'
115  )
116  ];
117  }
118 
123  {
125 
126  if (isset($options[self::INPUT_KEY_CACHE_BACKEND])) {
127  if ($options[self::INPUT_KEY_CACHE_BACKEND] == self::INPUT_VALUE_CACHE_REDIS) {
128  $configData->set(self::CONFIG_PATH_CACHE_BACKEND, self::CONFIG_VALUE_CACHE_REDIS);
129  $this->setDefaultRedisConfig($deploymentConfig, $configData);
130  } else {
131  $configData->set(self::CONFIG_PATH_CACHE_BACKEND, $options[self::INPUT_KEY_CACHE_BACKEND]);
132  }
133  }
134 
135  foreach ($this->inputKeyToConfigPathMap as $inputKey => $configPath) {
136  if (isset($options[$inputKey])) {
137  $configData->set($configPath, $options[$inputKey]);
138  }
139  }
140  return $configData;
141  }
142 
147  {
148  $errors = [];
149 
150  $currentCacheBackend = $deploymentConfig->get(Cache::CONFIG_PATH_CACHE_BACKEND);
151  if (isset($options[self::INPUT_KEY_CACHE_BACKEND])) {
152  if ($options[self::INPUT_KEY_CACHE_BACKEND] == self::INPUT_VALUE_CACHE_REDIS) {
153  if (!$this->validateRedisConfig($options, $deploymentConfig)) {
154  $errors[] = 'Invalid Redis configuration. Could not connect to Redis server.';
155  }
156  }
157  } elseif ($currentCacheBackend == self::CONFIG_VALUE_CACHE_REDIS) {
158  if (!$this->validateRedisConfig($options, $deploymentConfig)) {
159  $errors[] = 'Invalid Redis configuration. Could not connect to Redis server.';
160  }
161  }
162 
163  if (isset($options[self::INPUT_KEY_CACHE_BACKEND])
164  && !in_array($options[self::INPUT_KEY_CACHE_BACKEND], $this->validBackendCacheOptions)
165  ) {
166  $errors[] = "Invalid cache handler '{$options[self::INPUT_KEY_CACHE_BACKEND]}'";
167  }
168 
169  return $errors;
170  }
171 
179  private function validateRedisConfig(array $options, DeploymentConfig $deploymentConfig)
180  {
181  $config = [];
182 
183  $config['host'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER])
185  : $deploymentConfig->get(
186  self::CONFIG_PATH_CACHE_BACKEND_SERVER,
187  $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER)
188  );
189 
190  $config['port'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT])
192  : $deploymentConfig->get(
193  self::CONFIG_PATH_CACHE_BACKEND_PORT,
194  $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT)
195  );
196 
197  $config['db'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE])
199  : $deploymentConfig->get(
200  self::CONFIG_PATH_CACHE_BACKEND_DATABASE,
201  $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE)
202  );
203 
204  $config['password'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD])
206  : $deploymentConfig->get(
207  self::CONFIG_PATH_CACHE_BACKEND_PASSWORD,
208  $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD)
209  );
210 
211  return $this->redisValidator->isValidConnection($config);
212  }
213 
221  private function setDefaultRedisConfig(DeploymentConfig $deploymentConfig, ConfigData $configData)
222  {
223  foreach ($this->inputKeyToConfigPathMap as $inputKey => $configPath) {
224  $configData->set($configPath, $deploymentConfig->get($configPath, $this->getDefaultConfigValue($inputKey)));
225  }
226 
227  return $configData;
228  }
229 
236  private function getDefaultConfigValue($inputKey)
237  {
238  if (isset($this->defaultConfigValues[$inputKey])) {
239  return $this->defaultConfigValues[$inputKey];
240  } else {
241  return '';
242  }
243  }
244 }
__construct(RedisConnectionValidator $redisValidator)
Definition: Cache.php:74
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$config
Definition: fraud_order.php:17
$deploymentConfig
validate(array $options, DeploymentConfig $deploymentConfig)
Definition: Cache.php:146
createConfig(array $options, DeploymentConfig $deploymentConfig)
Definition: Cache.php:122
$errors
Definition: overview.phtml:9