Form.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Ui\Component;
  7. use Magento\Framework\Api\FilterBuilder;
  8. use Magento\Framework\View\Element\UiComponent\ContextInterface;
  9. use Magento\Framework\View\Element\UiComponentInterface;
  10. /**
  11. * @api
  12. * @since 100.0.2
  13. */
  14. class Form extends AbstractComponent
  15. {
  16. const NAME = 'form';
  17. /**
  18. * @var FilterBuilder
  19. */
  20. protected $filterBuilder;
  21. /**
  22. * @param ContextInterface $context
  23. * @param FilterBuilder $filterBuilder
  24. * @param UiComponentInterface[] $components
  25. * @param array $data
  26. */
  27. public function __construct(
  28. ContextInterface $context,
  29. FilterBuilder $filterBuilder,
  30. array $components = [],
  31. array $data = []
  32. ) {
  33. $this->filterBuilder = $filterBuilder;
  34. parent::__construct(
  35. $context,
  36. $components,
  37. $data
  38. );
  39. }
  40. /**
  41. * Get component name
  42. *
  43. * @return string
  44. */
  45. public function getComponentName()
  46. {
  47. return static::NAME;
  48. }
  49. /**
  50. * {@inheritdoc}
  51. */
  52. public function getDataSourceData()
  53. {
  54. $dataSource = [];
  55. $id = $this->getContext()->getRequestParam($this->getContext()->getDataProvider()->getRequestFieldName(), null);
  56. $filter = $this->filterBuilder->setField($this->getContext()->getDataProvider()->getPrimaryFieldName())
  57. ->setValue($id)
  58. ->create();
  59. $this->getContext()->getDataProvider()
  60. ->addFilter($filter);
  61. $data = $this->getContext()->getDataProvider()->getData();
  62. if (isset($data[$id])) {
  63. $dataSource = [
  64. 'data' => $data[$id]
  65. ];
  66. } elseif (isset($data['items'])) {
  67. foreach ($data['items'] as $item) {
  68. if ($item[$item['id_field_name']] == $id) {
  69. $dataSource = ['data' => ['general' => $item]];
  70. }
  71. }
  72. }
  73. return $dataSource;
  74. }
  75. }