Source of file UnionScaffolder.php
Size: 2,880 Bytes - Last Modified: 2021-12-23T10:31:47+00:00
/var/www/docs.ssmods.com/process/src/src/Scaffolding/Scaffolders/UnionScaffolder.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | <?php namespace SilverStripe\GraphQL\Scaffolding\Scaffolders; use Exception; use GraphQL\Type\Definition\UnionType; use SilverStripe\GraphQL\Manager; use SilverStripe\GraphQL\Scaffolding\Interfaces\ManagerMutatorInterface; use SilverStripe\GraphQL\Scaffolding\Interfaces\ScaffolderInterface; use SilverStripe\GraphQL\Scaffolding\StaticSchema; use SilverStripe\ORM\DataObject; class UnionScaffolder implements ScaffolderInterface, ManagerMutatorInterface { /** * @var string */ protected $name; /** * @var array */ protected $types = []; /** * @param string $name * @param array $types */ public function __construct($name, $types = []) { $this->name = $name; $this->types = $types; } /** * @return string */ public function getName() { return $this->name; } /** * @param string $name * @return UnionScaffolder */ public function setName($name) { $this->name = $name; return $this; } /** * @return array */ public function getTypes() { return $this->types; } /** * @param array $types * @return $this */ public function setTypes($types) { $this->types = $types; return $this; } /** * @param Manager $manager * @return UnionType */ public function scaffold(Manager $manager) { $types = $this->types; return new UnionType([ 'name' => $this->name, 'types' => function () use ($manager, $types) { return array_map(function ($item) use ($manager) { return $manager->getType($item); }, $types); }, 'resolveType' => function ($obj) use ($manager) { if (!$obj instanceof DataObject) { throw new Exception(sprintf( 'Type with class %s is not a DataObject', get_class($obj) )); } $class = get_class($obj); while ($class !== DataObject::class) { $typeName = StaticSchema::inst()->typeNameForDataObject($class); if ($manager->hasType($typeName)) { return $manager->getType($typeName); } $class = get_parent_class($class); } throw new Exception(sprintf( 'There is no type defined for %s, and none of its ancestors are defined.', get_class($obj) )); } ]); } /** * @param Manager $manager */ public function addToManager(Manager $manager) { $manager->addType($this->scaffold($manager)); } } |