Согласно вашему изображению вы не создали тип для Polygon
.
Поскольку вы на самом деле не указали, как бы вы хотели проиллюстрировать многоугольник, я просто приведу пример. В этом примере я собираюсь создать новый скалярный тип GraphQl.
Обычный способ указать многоугольник с помощью набора наборов координат, например, так:
((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))
Чтобы представить это, я бы создал новый скаляр
"A string representation of a polygon e.g. `((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))`."
scalar Polygon @scalar(class: "Your\\Classname\\Polygon")
Затем создайте класс, который должен анализировать / проверять строку
use GraphQL\Error\Error;
use GraphQL\Language\AST\Node;
use GraphQL\Language\AST\StringValueNode;
use GraphQL\Type\Definition\ScalarType;
class Polygon extends ScalarType
{
/**
* Serializes an internal value to include in a response.
*
* @param mixed $value
*
* @return mixed
*
* @throws Error
*/
public function serialize($value)
{
if ($value instanceof Geometry\Polygon) {
$value->toString();
}
return (new Geometry\Polygon($value))->toString();
}
/**
* Parses an externally provided value (query variable) to use as an input
*
* In the case of an invalid value this method must throw an Exception
*
* @param mixed $value
*
* @return mixed
*
* @throws Error
*/
public function parseValue($value)
{
return new Geometry\Polygon($value);
}
/**
* Parses an externally provided literal value (hardcoded in GraphQL query) to use as an input
*
* In the case of an invalid node or value this method must throw an Exception
*
* @param Node $valueNode
* @param mixed[]|null $variables
*
* @return mixed
*
* @throws Exception
*/
public function parseLiteral($valueNode, ?array $variables = null)
{
if (! $valueNode instanceof StringValueNode) {
throw new Error(
"Query error: Can only parse strings, got {$valueNode->kind}",
[$valueNode]
);
}
return new Geometry\Polygon($valueNode->value);
}
}
Я не реализовал логику для класса Geometry\Polygon
, и все проверки для этого типа ввода и скалярного типа могут также нуждаться в некоторой настройке. Но именно так вы и создадите скалярный тип полигонов в Ligthouse.
Имея это, вы можете затем в своем поле areazone
ввести строку с форматом, указанным выше, и в своем коде вы получите ее как Geometry\Polygon
класс.
Подробнее о скалярах можно прочитать в Документах Lighthouse .