lib/netgen/layouts-core/lib/Item/CmsItemBuilder.php line 23

  1. <?php
  2. declare(strict_types=1);
  3. namespace Netgen\Layouts\Item;
  4. use Netgen\Layouts\Exception\Item\ValueException;
  5. use function get_debug_type;
  6. final class CmsItemBuilder implements CmsItemBuilderInterface
  7. {
  8.     /**
  9.      * @var array<\Netgen\Layouts\Item\ValueConverterInterface<object>>
  10.      */
  11.     private array $valueConverters = [];
  12.     /**
  13.      * @param iterable<\Netgen\Layouts\Item\ValueConverterInterface<object>> $valueConverters
  14.      */
  15.     public function __construct(iterable $valueConverters)
  16.     {
  17.         foreach ($valueConverters as $valueConverter) {
  18.             if ($valueConverter instanceof ValueConverterInterface) {
  19.                 $this->valueConverters[] = $valueConverter;
  20.             }
  21.         }
  22.     }
  23.     public function build(object $object): CmsItemInterface
  24.     {
  25.         foreach ($this->valueConverters as $valueConverter) {
  26.             if (!$valueConverter->supports($object)) {
  27.                 continue;
  28.             }
  29.             return CmsItem::fromArray(
  30.                 [
  31.                     'value' => $valueConverter->getId($object),
  32.                     'remoteId' => $valueConverter->getRemoteId($object),
  33.                     'valueType' => $valueConverter->getValueType($object),
  34.                     'name' => $valueConverter->getName($object),
  35.                     'isVisible' => $valueConverter->getIsVisible($object),
  36.                     'object' => $valueConverter->getObject($object),
  37.                 ],
  38.             );
  39.         }
  40.         throw ValueException::noValueConverter(get_debug_type($object));
  41.     }
  42. }