Page.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\CmsGraphQl\Model\Resolver;
  8. use Magento\CmsGraphQl\Model\Resolver\DataProvider\Page as PageDataProvider;
  9. use Magento\Framework\Exception\NoSuchEntityException;
  10. use Magento\Framework\GraphQl\Config\Element\Field;
  11. use Magento\Framework\GraphQl\Exception\GraphQlInputException;
  12. use Magento\Framework\GraphQl\Exception\GraphQlNoSuchEntityException;
  13. use Magento\Framework\GraphQl\Query\ResolverInterface;
  14. use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
  15. /**
  16. * CMS page field resolver, used for GraphQL request processing
  17. */
  18. class Page implements ResolverInterface
  19. {
  20. /**
  21. * @var PageDataProvider
  22. */
  23. private $pageDataProvider;
  24. /**
  25. * @param PageDataProvider $pageDataProvider
  26. */
  27. public function __construct(
  28. PageDataProvider $pageDataProvider
  29. ) {
  30. $this->pageDataProvider = $pageDataProvider;
  31. }
  32. /**
  33. * @inheritdoc
  34. */
  35. public function resolve(
  36. Field $field,
  37. $context,
  38. ResolveInfo $info,
  39. array $value = null,
  40. array $args = null
  41. ) {
  42. $pageId = $this->getPageId($args);
  43. $pageData = $this->getPageData($pageId);
  44. return $pageData;
  45. }
  46. /**
  47. * @param array $args
  48. * @return int
  49. * @throws GraphQlInputException
  50. */
  51. private function getPageId(array $args): int
  52. {
  53. if (!isset($args['id'])) {
  54. throw new GraphQlInputException(__('"Page id should be specified'));
  55. }
  56. return (int)$args['id'];
  57. }
  58. /**
  59. * @param int $pageId
  60. * @return array
  61. * @throws GraphQlNoSuchEntityException
  62. */
  63. private function getPageData(int $pageId): array
  64. {
  65. try {
  66. $pageData = $this->pageDataProvider->getData($pageId);
  67. } catch (NoSuchEntityException $e) {
  68. throw new GraphQlNoSuchEntityException(__($e->getMessage()), $e);
  69. }
  70. return $pageData;
  71. }
  72. }