deinternetjongens / lighthouse-utils
Requires
- php: >=7.1
- illuminate/auth: ^5.4
- illuminate/database: ^5.4
- illuminate/support: ^5.4
- nuwave/lighthouse: ^2.2
Requires (Dev)
- orchestra/testbench: ~3.6.0|~3.7.0
- phpunit/phpunit: ~7.0
- squizlabs/php_codesniffer: ^3.3
This package is auto-updated.
Last update: 2024-02-26 15:04:25 UTC
README
此包可以为 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/Types
、app/GraphQL/Queries
和 app/GraphQL/Mutations
目录中添加类型、查询和突变来定义您的 GraphQL 模式。如果您想更改这些路径,发布此包的配置文件并在那里更改路径。
当前此包只支持自定义类型,查询和突变将被忽略。您可以定义自己的自定义类型,并运行以下命令来自动生成这些类型的查询和突变。将来,您可以将自定义查询和突变添加到上述目录中。这些也将被用于生成的模式。
有关模式和基本Lighthouse使用的更多信息,请查看Lighthouse 文档
要生成您的 schema.graphql
文件,请运行以下命令
php artisan lighthouse-utils:generate-schema
模式将生成到Lighthouse配置中定义的路径,lighthouse.schema.register
自定义查询和突变
可能需要除了生成的模式之外的自定义查询或突变。在此包中,您可以通过在默认目录 app/GraphQL/Queries
和 app/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 模型。