src/Transformer/JsonSchemaForm/CompoundTransformer.php line 42

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Copyright (c) 2019 TECLA Consulting Group oü.
  5.  * All rights reserved.
  6.  *
  7.  * This unpublished material is proprietary to TECLA Consulting Group oü.
  8.  * All rights reserved. The methods and
  9.  * techniques described herein are considered trade secrets
  10.  * and/or confidential. Reproduction or distribution, in whole
  11.  * or in part, is forbidden except by express written permission
  12.  * of TECLA Consulting Group oü.
  13.  *
  14.  * @author    Matúš Sýkorjak <matus@tecla.no>
  15.  * @copyright 2019 TECLA Consulting Group oü
  16.  */
  17. namespace App\Transformer\JsonSchemaForm;
  18. use App\Util\JsonSchemaForm\ResolverInterface;
  19. use Symfony\Component\Form\FormInterface;
  20. use Symfony\Component\Form\FormTypeGuesserInterface;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. class CompoundTransformer extends AbstractTransformer
  23. {
  24.     /**
  25.      * @var ResolverInterface
  26.      */
  27.     protected $resolver;
  28.     public function __construct(TranslatorInterface $translator, ?FormTypeGuesserInterface $validatorGuesserResolverInterface $resolver)
  29.     {
  30.         parent::__construct($translator$validatorGuesser);
  31.         $this->resolver $resolver;
  32.     }
  33.     /**
  34.      * {@inheritdoc}
  35.      */
  36.     public function transform(FormInterface $form, array $extensions = [], string $widget null): array
  37.     {
  38.         $data = [];
  39.         $order 1;
  40.         $required = [];
  41.         foreach ($form->all() as $name => $field) {
  42.             $transformerData $this->resolver->resolve($field);
  43.             $transformedChild $transformerData['transformer']->transform($field$extensions$transformerData['widget']);
  44.             $transformedChild['propertyOrder'] = $order;
  45.             $data[$name] = $transformedChild;
  46.             ++$order;
  47.             if (true === $transformerData['transformer']->isRequired($field)) {
  48.                 $required[] = $field->getName();
  49.             }
  50.         }
  51.         $schema = [
  52.             'title' => $form->getConfig()->getOption('label'),
  53.             'action' => $form->getConfig()->getOption('action'),
  54.             'type' => 'object',
  55.             'properties' => $data,
  56.         ];
  57.         if (false === empty($required)) {
  58.             $schema['required'] = $required;
  59.         }
  60.         $schema $this->addCommonSpecs($form$schema$widget$extensions);
  61.         return $schema;
  62.     }
  63. }