SaveModulesForm.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace hd\models\homePageConfig;
  3. use bizHd\homePageConfig\classes\HomePageConfigClass;
  4. use hd\models\BaseForm;
  5. /**
  6. * 保存首页模块顺序与开关
  7. */
  8. class SaveModulesForm extends BaseForm
  9. {
  10. /** @var array */
  11. public $items;
  12. public function rules()
  13. {
  14. return [
  15. ['items', 'required', 'message' => '请提交配置项'],
  16. ['items', 'validateItems'],
  17. ];
  18. }
  19. public function attributeLabels()
  20. {
  21. return [
  22. 'items' => '配置项',
  23. ];
  24. }
  25. public function validateItems($attribute)
  26. {
  27. $items = $this->$attribute;
  28. if (is_string($items)) {
  29. $items = json_decode($items, true);
  30. }
  31. if (!is_array($items)) {
  32. $this->addError($attribute, '配置项格式错误');
  33. return;
  34. }
  35. $defaultKeys = HomePageConfigClass::DEFAULT_KEYS;
  36. if (count($items) !== count($defaultKeys)) {
  37. $this->addError($attribute, '配置项数量不正确');
  38. return;
  39. }
  40. $result = [];
  41. $used = [];
  42. foreach ($items as $item) {
  43. if (!is_array($item)) {
  44. $this->addError($attribute, '配置项格式错误');
  45. return;
  46. }
  47. $key = isset($item['key']) ? strval($item['key']) : '';
  48. if ($key === '' || !in_array($key, $defaultKeys, true)) {
  49. $this->addError($attribute, '存在无效配置项');
  50. return;
  51. }
  52. if (isset($used[$key])) {
  53. $this->addError($attribute, '配置项重复');
  54. return;
  55. }
  56. $result[] = [
  57. 'key' => $key,
  58. 'enabled' => !empty($item['enabled']) ? 1 : 0,
  59. ];
  60. $used[$key] = true;
  61. }
  62. if (count($used) !== count($defaultKeys)) {
  63. $this->addError($attribute, '配置项不完整');
  64. return;
  65. }
  66. $this->$attribute = $result;
  67. }
  68. /**
  69. * @return array
  70. */
  71. public function getItems()
  72. {
  73. return is_array($this->items) ? $this->items : [];
  74. }
  75. }