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;
};
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.