Setting.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. namespace Dcat\Admin\Support;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Models\Setting as Model;
  5. use Illuminate\Database\QueryException;
  6. use Illuminate\Support\Arr;
  7. use Illuminate\Support\Fluent;
  8. class Setting extends Fluent
  9. {
  10. /**
  11. * 获取配置.
  12. *
  13. * @param string $key
  14. * @param null $default
  15. *
  16. * @return mixed
  17. */
  18. public function get($key, $default = null)
  19. {
  20. return Arr::get($this->attributes, $key, $default);
  21. }
  22. /**
  23. * 设置配置信息.
  24. *
  25. * @param array $data
  26. *
  27. * @return $this
  28. */
  29. public function set($key, $value = null)
  30. {
  31. $data = is_array($key) ? $key : [$key => $value];
  32. foreach ($data as $key => $value) {
  33. Arr::set($this->attributes, $key, $value);
  34. }
  35. return $this;
  36. }
  37. /**
  38. * 保存配置到数据库
  39. *
  40. * @param array $data
  41. *
  42. * @return $this
  43. */
  44. public function save(array $data = [])
  45. {
  46. if ($data) {
  47. $this->set($data);
  48. }
  49. foreach ($this->attributes as $key => $value) {
  50. if (is_array($value)) {
  51. $value = json_encode($value);
  52. }
  53. $model = Model::query()
  54. ->where('slug', $key)
  55. ->first() ?: new Model();
  56. $model->fill([
  57. 'slug' => $key,
  58. 'value' => (string) $value,
  59. ])->save();
  60. }
  61. return $this;
  62. }
  63. /**
  64. * @return static
  65. */
  66. public static function fromDatabase()
  67. {
  68. $values = [];
  69. try {
  70. $values = Model::pluck('value', 'slug')->toArray();
  71. } catch (QueryException $e) {
  72. Admin::reportException($e);
  73. }
  74. return new static($values);
  75. }
  76. }