PHP code example of flownative / graphql

1. Go to this page and download the library: Download flownative/graphql library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

flownative / graphql example snippets



declare(strict_types=1);
namespace Flownative\Example\GraphQL;

final class Api
{
    public function ping($_, array $arguments): array
    {
        return [
            'pong' => time()
        ];
    }
}


declare(strict_types=1);
namespace Flownative\Example\GraphQL;

use Flownative\GraphQL\EndpointInterface;
use GraphQL\Executor\ExecutionResult;
use GraphQL\GraphQL;
use GraphQL\Type\Schema;
use Neos\Eel\FlowQuery\OperationResolver;

final class Endpoint implements EndpointInterface
{
    public function __construct(readonly private Api $api)
    {
    }

    public static function getPath(): string
    {
        return '/api/graphql';
    }

    public function getSchemaUri(): string
    {
        return 'resource://Flownative.Example/Private/GraphQL/schema.graphql';
    }

    public function __invoke($objectValue, $args, $_, ResolveInfo $resolveInfo): mixed
    {
        $fieldName = $resolveInfo->fieldName;
        if ($objectValue === null && method_exists($this->api, $fieldName)) {
            $result = $this->api->$fieldName($objectValue, $args);
        } elseif (is_array($objectValue)) {
            $result = $objectValue[$fieldName] ?? null;
        } elseif ($objectValue !== null && method_exists($objectValue, $fieldName)) {
            $result = $objectValue->$fieldName();
        } elseif ($objectValue !== null && method_exists($objectValue, 'get' . ucfirst($fieldName))) {
            $methodName = 'get' . ucfirst($fieldName);
            $result = $objectValue->$methodName($objectValue);
        } elseif ($objectValue !== null && method_exists($objectValue, $fieldName . 'Query')) {
            $methodName = $fieldName . 'Query';
            $query = $objectValue->$methodName();
            if (!$query instanceof Query) {
                throw new RuntimeException(sprintf('Failed to resolve field "%s": %s->%s() returned %s, but expected %s', $fieldName, get_class($objectValue), $methodName, get_debug_type($query), Query::class), 1648713012);
            }
            if (!method_exists($this->api, $query->queryName)) {
                throw new RuntimeException(sprintf('Failed to resolve field "%s": %s->%s() returned %s, but %s->%s() does not exist', $fieldName, get_class($objectValue), $methodName, $query->queryName, get_class($this->api), $query->queryName), 1648713106);
            }
            $result = $this->api->{$query->queryName}(null, $query->arguments);
        } elseif ($objectValue !== null && property_exists($objectValue, $fieldName)) {
            $result = $objectValue->{$fieldName};
        } else {
            throw new RuntimeException(sprintf('Failed to resolve field "%s" on subject %s', $fieldName, get_debug_type($objectValue)), 1613477425);
        }

        if ($result instanceof DateTimeInterface) {
            $result = $result->format(DATE_ISO8601);
        }

        return $result;
    }

    public function getTypeConfigDecorator(): ?callable
    {
        return static function ($typeConfig) {
            $typeConfig['resolveType'] = static function ($object) {
                if (method_exists($object, 'isOfType')) {
                    return $object->isOfType();
                }
                $classname = is_object($object) ? get_class($object) : '';
                if ($position = strrpos($classname, '\\')) {
                    return substr($classname, $position + 1);
                }
                return $position;
            };
            return $typeConfig;
        };
    }
}