hansott / graphql-language
1.3.1
2017-09-23 19:06 UTC
Requires (Dev)
- phpunit/phpunit: ~4.8||~5.0||~6.0
This package is not auto-updated.
Last update: 2022-02-01 13:09:51 UTC
README
用PHP编写的GraphQL解析器。解析器能够解析完整的 规范。此包与PHP 5.3+ 兼容。我还在积极开发此项目。可能会有一些问题出现。🙈
此包正在与一个服务器端包一起开发,但尚未公开。
安装
通过Composer
$ composer require hansott/graphql-language
用法
将查询解析为 HansOtt\GraphQL\Query\Document
use HansOtt\GraphQL\Query\ParseError; use HansOtt\GraphQL\Query\SyntaxError; use HansOtt\GraphQL\Query\ParserFactory; $factory = new ParserFactory; $parser = $factory->create(); $query = <<<'QUERY' { author(id: 1) { name } } QUERY; try { $document = $parser->parse($query); var_dump($document); // Instance of HansOtt\GraphQL\Query\Document } catch (SyntaxError $e) { echo "Syntax error in query: {$e->getMessage()}" . PHP_EOL; } catch (ParseError $e) { echo "Failed to parse query: {$e->getMessage()}" . PHP_EOL; }
遍历 HansOtt\GraphQL\Query\Document
use HansOtt\GraphQL\Query\Node; use HansOtt\GraphQL\Query\Traverser; use HansOtt\GraphQL\Query\VisitorBase; use HansOtt\GraphQL\Query\OperationQuery; final class VisitorQueryFinder extends VisitorBase // Or implement HansOtt\GraphQL\Query\Visitor { /** * @var OperationQuery[] */ private $queries = []; public function enterNode(Node $node) { if ($node instanceof OperationQuery) { $this->queries[] = $node; } } public function getQueries() { return $this->queries; } } $document = $parser->parse($query); $finder = new VisitorQueryFinder; $traverser = new Traverser($finder); $traverser->traverse($document); var_dump($finder->getQueries()); // Or if you need multiple visitors // use HansOtt\GraphQL\Query\VisitorMany $visitors = new VisitorMany([$finder, ...]); $traverser = new Traverser($visitors); $traverser->traverse($document); var_dump($finder->getQueries());
将模式声明解析为 HansOtt\GraphQL\Schema\Schema
use HansOtt\GraphQL\Schema\ParseError; use HansOtt\GraphQL\Schema\SyntaxError; use HansOtt\GraphQL\Schema\ParserFactory; $factory = new ParserFactory; $parser = $factory->create(); $schema = <<<'SCHEMA' enum DogCommand { SIT, DOWN, HEEL } type Dog implements Pet { name: String! nickname: String barkVolume: Int doesKnowCommand(dogCommand: DogCommand!): Boolean! isHousetrained(atOtherHomes: Boolean): Boolean! owner: Human } interface Sentient { name: String! } interface Pet { name: String! } type Alien implements Sentient { name: String! homePlanet: String } type Human implements Sentient { name: String! } enum CatCommand { JUMP } type Cat implements Pet { name: String! nickname: String doesKnowCommand(catCommand: CatCommand!): Boolean! meowVolume: Int } union CatOrDog = Cat | Dog union DogOrHuman = Dog | Human union HumanOrAlien = Human | Alien type QueryRoot { dog: Dog } SCHEMA; try { $schema = $parser->parse($schema); var_dump($schema); // Instance of HansOtt\GraphQL\Schema\Schema } catch (SyntaxError $e) { echo "Syntax error in query: {$e->getMessage()}" . PHP_EOL; } catch (ParseError $e) { echo "Failed to parse query: {$e->getMessage()}" . PHP_EOL; }
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
$ composer test
贡献
请参阅 CONTRIBUTING 和 CODE_OF_CONDUCT 了解详细信息。
安全
如果您发现任何安全相关的问题,请通过电子邮件发送给 hansott at hotmail be,而不是使用问题跟踪器。
致谢
许可
MIT许可(MIT)。请参阅 许可文件 了解更多信息。