CanLoadFields.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace Dcat\Admin\Form\Field;
  3. use Illuminate\Support\Str;
  4. trait CanLoadFields
  5. {
  6. /**
  7. * 联动加载.
  8. *
  9. * @param string $field
  10. * @param string $sourceUrl
  11. * @param string $idField
  12. * @param string $textField
  13. *
  14. * @return $this
  15. */
  16. public function load($field, $sourceUrl, string $idField = 'id', string $textField = 'text')
  17. {
  18. return $this->loads($field, $sourceUrl, $idField, $textField);
  19. }
  20. /**
  21. * 联动加载多个字段.
  22. *
  23. * @param array|string $fields
  24. * @param array|string $sourceUrls
  25. * @param string $idField
  26. * @param string $textField
  27. *
  28. * @return $this
  29. */
  30. public function loads($fields = [], $sourceUrls = [], string $idField = 'id', string $textField = 'text')
  31. {
  32. $fieldsStr = implode('^', array_map(function ($field) {
  33. if (Str::contains($field, '.')) {
  34. return $this->normalizeElementClass($field).'_';
  35. }
  36. return $this->normalizeElementClass($field);
  37. }, (array) $fields));
  38. $urlsStr = implode('^', array_map(function ($url) {
  39. return admin_url($url);
  40. }, (array) $sourceUrls));
  41. return $this->addVariables(['loads' => [
  42. 'fields' => $fieldsStr,
  43. 'urls' => $urlsStr,
  44. 'idField' => $idField,
  45. 'textField' => $textField,
  46. ]]);
  47. }
  48. }