Полигон маяк типа graphql

Я использую Lighthouse PHP в своем приложении laravel 5.7. Я пытаюсь определить геометрическое поле (многоугольник) в своей схеме, но это не сработало.

Может ли кто-нибудь помочь мне, как определить поле многоугольника в моей схеме graphql. схема и код запроса

Не могли бы вы добавить код, который у вас есть, к вашему вопросу?

digijay 09.01.2019 16:09

да ладно сделано @digijay

Walidovic 09.01.2019 16:27

Где ваше определение типа для многоугольника? Какие ошибки вы получаете? Думаю, стоит посмотреть Скаляры.

Oliver Nybroe 05.04.2019 11:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
272
1

Ответы 1

Судя по вашему образу, вы не создали типа для Polygon.

Поскольку вы на самом деле не указали, как вы хотите проиллюстрировать многоугольник, я просто покажу пример. В этом примере я собираюсь создать новый тип GraphQl Scalar.

Обычный способ указать многоугольник - использовать набор таких наборов координат, как

((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, и вся проверка для этого типа ввода и скалярного типа также может потребовать некоторой настройки. Но в основном именно так вы создадите тип Polygon Scalar в Ligthouse.

Имея это, вы можете затем в поле areazone ввести строку с форматом, указанным выше, и в своем коде вы получите ее как класс Geometry\Polygon.

Вы можете узнать больше о скалярах в Документы Lighthouse.

Другие вопросы по теме