Load.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace ForkBB\Models\Config;
  3. use ForkBB\Models\Method;
  4. use ForkBB\Models\Config\Model as Config;
  5. use PDO;
  6. use RuntimeException;
  7. class Load extends Method
  8. {
  9. /**
  10. * Заполняет модель данными из БД
  11. * Создает кеш
  12. */
  13. public function load(): Config
  14. {
  15. $config = [];
  16. $query = 'SELECT cf.conf_name, cf.conf_value
  17. FROM ::config AS cf';
  18. $stmt = $this->c->DB->query($query);
  19. while ($row = $stmt->fetch()) {
  20. switch ($row['conf_name'][0]) {
  21. case 'a':
  22. $value = \json_decode($row['conf_value'], true, 512, \JSON_THROW_ON_ERROR);
  23. break;
  24. case 'i':
  25. if (null !== $row['conf_value']) {
  26. $value = (int) $row['conf_value'];
  27. break;
  28. }
  29. default:
  30. $value = $row['conf_value'];
  31. break;
  32. }
  33. $config[$row['conf_name']] = $value;
  34. }
  35. $this->model->setAttrs($config);
  36. if (true !== $this->c->Cache->set('config', $config)) {
  37. throw new RuntimeException('Unable to write value to cache - config');
  38. }
  39. return $this->model;
  40. }
  41. }