deinternetjongens/lighthouse-utils

此包已被弃用且不再维护。作者建议使用 nuwave/lighthouse 包。

Laravel Lighthouse 扩展包,包含一些工具以自动生成出色的 GraphQL API

v0.3.2-alpha 2018-09-19 12:52 UTC

README

Build Status Code Coverage Scrutinizer Code Quality Latest Unstable Version

此包可以为 Lighthouse GraphQL 库 生成查询。这不是一个独立的包,因此 Lighthouse 被列为依赖项。

要生成查询,您只需定义几个 GraphQL 类型 并运行生成命令。滚动到 'Schema' 了解更多信息。

我们还包含了一些 指令标量类型。关于这一点稍后详细说明。

安装

通过 composer 安装

composer require deinternetjongens/lighthouse-utils

或者,您可以尝试以下示例安装。

示例安装

示例安装可在: https://github.com/maarten00/lighthouse-utils-example

注册服务提供者

注意!如果您使用 laravel>=5.5 且具有包自动发现功能,以下步骤是可选的。

将服务提供者添加到 config/app.php 中的 providers 部分

deinternetjongens\LighthouseUtils\ServiceProvider::class,

注册外观

config/app.php 中的 aliases 部分注册包外观

deinternetjongens\LighthouseUtils\Facades\LighthouseUtils::class,

发布配置文件

php artisan vendor:publish --provider="DeInternetJongens\LighthouseUtils\ServiceProvider" --tag="config"

贡献

在提交之前,请运行 ./automate.sh

此脚本将运行所有代码风格检查和 phpunit 测试。在打开 pull request 之前修复所有错误。

使用

此包使用 Laravel 自动发现来将其与应用程序关联。它在 /graphql 路由上公开 GraphQL 接口。

要开始使用,请在您的 Laravel 应用程序中运行以下命令

php artisan vendor:publish --provider="Nuwave\Lighthouse\Providers\LighthouseServiceProvider"
php artisan vendor:publish --provider="DeInternetJongens\LighthouseUtils\ServiceProvider" --tag="migrations"
php artisan migrate

将生成一个配置文件: config/lighthouse.php。如果您想更改这些值,可以发布此包的配置文件并更改那里的路径。

Schema 生成

通过在 app/GraphQL/Typesapp/GraphQL/Queriesapp/GraphQL/Mutations 目录中添加类型、查询和突变来定义您的 GraphQL 模式。如果您想更改这些路径,发布此包的配置文件并在那里更改路径。

当前此包只支持自定义类型,查询和突变将被忽略。您可以定义自己的自定义类型,并运行以下命令来自动生成这些类型的查询和突变。将来,您可以将自定义查询和突变添加到上述目录中。这些也将被用于生成的模式。

有关模式和基本Lighthouse使用的更多信息,请查看Lighthouse 文档

要生成您的 schema.graphql 文件,请运行以下命令

php artisan lighthouse-utils:generate-schema

模式将生成到Lighthouse配置中定义的路径,lighthouse.schema.register

自定义查询和突变

可能需要除了生成的模式之外的自定义查询或突变。在此包中,您可以通过在默认目录 app/GraphQL/Queriesapp/GraphQL/Mutations 中创建 .graphql 文件来添加自定义查询和突变 (这些目录可以通过编辑 config/lighthouse.php 文件进行修改)

以获取一个模型的实例为例

type Query{
    customQuery(id: ID! @eq): Model! @find(model: "Model")
}

此查询将在运行模式生成命令后进行解析,并将其添加到 schema.graphql 的查询部分

标量类型

目前包含两种标量类型。有关标量类型使用的更多信息,请在此处找到

日期

格式为 Y-m-d 的日期字符串。例如:"2018-01-01"

scalar Date @scalar(class: "DeInternetJongens\\LighthouseUtils\\Schema\\Scalars\\Date")

DateTimeTZ

格式为 Y-m-d H:i:s+P 的日期字符串。例如:"2018-01-01 13:00:00+00:00"

scalar DateTimeTz @scalar(class: "DeInternetJongens\\LighthouseUtils\\Schema\\Scalars\\DateTimeTz")

PostalCodeNl

适用于荷兰的有效邮编,格式为 1111aa。例如:"7311SZ"

电子邮件

符合RFC 5321的电子邮件

全文搜索

表示字段在多个字段中搜索。要使用此标量,您需要在模型上添加一个作用域 scopeFullTextSearch。示例

public function scopeFullTextSearch(Builder $builder, $value)
{
    return $builder->whereRaw("column_one % ? OR column_two % ?", [$value, $value])
        ->orderByRaw('column_two <-> ?', [$value]);
}

在作用域中,您可以基本上定义任何类型的查询。

指令

要运行更高级的查询,包含了一些指令。这些指令会自动与Lighthouse注册,因此您可以根据自己的意愿使用它们。

目前包含以下指令

  • contains
  • ends_with
  • gte
  • gt
  • lte
  • lt
  • in (逗号分隔的字符串)
  • not_contains
  • not_ends_with
  • not
  • not_in (逗号分隔的字符串)
  • not_starts_with
  • starts_with
  • fullTextSearch

迁移

此包将生成的模式存储在数据库中,因此模式可以在 schema.graphql 之外可用,并可用于同步权限。发布迁移并迁移数据库。

php artisan vendor:publish --provider="DeInternetJongens\LighthouseUtils\ServiceProvider" --tag="migrations"
php artisan migrate

授权

为了保护您的查询和迁移不受未经授权的用户访问,您可以启用授权功能。要启用授权,请确保您已发布此包的配置,并将以下行添加到您的 .env 文件中:

LIGHTHOUSE_UTILS_AUTHORIZATION=true

当生成模式时,将触发事件 DeInternetJongens\LighthouseUtils\Events\GraphQLSchemaGenerated。在您的应用程序中,您可以监听此事件以同步生成的权限与您的应用程序。事件具有一个 schema 变量,包含生成的模式。

生成的查询及其对应的权限也将持久化到您的数据库中的 graphql_schema 表。此包包含一个用于此表的 Eloquent 模型。