yakovenko / laravel-lighthouse-graphql-multi-schema
一个为 Lighthouse GraphQL 提供多模式支持的 Laravel 扩展包。
Requires
- php: ^8
- laravel/framework: ^9.0 || ^10.0 || ^11.0
- nuwave/lighthouse: ^6.0
README
yakovenko/laravel-lighthouse-graphql-multi-schema
是一个 Laravel 扩展包,为 Lighthouse GraphQL 提供多模式支持。它允许您在单个 Laravel 应用程序中管理多个 GraphQL 模式,简化开发并扩展功能。
安装
要求
- PHP : ^8
- Laravel : ^9.0 || ^10.0 || ^11.0
- Nuwave Lighthouse : ^6.0
安装扩展包
您可以使用 Composer 安装此扩展包。
composer require yakovenko/laravel-lighthouse-graphql-multi-schema
发布配置
安装扩展包后,您需要通过运行以下命令发布配置文件:
php artisan lighthouse-multi-schema:publish-config
这将创建一个名为 lighthouse-multi-schema.php
的配置文件,位于 config 目录下,您可以在其中设置您的 GraphQL 模式。
配置
在 config/lighthouse-multi-schema.php 文件中,您可以定义您的模式和它们的设置。以下是一个示例配置:
return [ 'multi_schemas' => [ 'example' => [ 'route_uri' => '/example-graphql', 'route_name' => 'example-graphql', 'schema_path' => base_path("graphql/example.graphql"), 'schema_cache_path' => env('LIGHTHOUSE_EXAMPLE_SCHEMA_CACHE_PATH', base_path("bootstrap/cache/example-schema.php")), 'schema_cache_enable' => env('LIGHTHOUSE_EXAMPLE_CACHE_ENABLE', false), 'middleware' => [ // Always set the `Accept: application/json` header. Nuwave\Lighthouse\Http\Middleware\AcceptJson::class, // Logs in a user if they are authenticated. In contrast to Laravel's 'auth' // middleware, this delegates auth and permission checks to the field level. Nuwave\Lighthouse\Http\Middleware\AttemptAuthentication::class, // Apply your custom middleware here. // For example: // App\Http\Middleware\ExampleSchemaMiddleware::class, ] ], // Add additional schemas as needed ], ];
中间件支持
现在,您可以针对每个 GraphQL 模式添加特定的中间件。这允许您根据使用的模式应用不同的中间件配置。只需为每个模式指定中间件类数组中的中间件类,它们将应用于相应的路由。
CSRF 异常
将您的 GraphQL 路由添加到 CSRF 异常中。
打开 App/Http/Middleware/VerifyCsrfToken.php
文件,并将您的路由添加到 $except 数组中。
<?php namespace App\Http\Middleware; use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware; class VerifyCsrfToken extends Middleware { /** * The URIs that should be excluded from CSRF verification. * * @var array<int, string> */ protected $except = [ 'schema1-graphql', 'schema2-graphql', // Add other routes as needed ]; }
为每个模式创建目录
将您的模式文件组织到每个模式的单独目录中。这些目录的结构以及您如何分割文件取决于您。以下是一个示例组织方式:
/graphql
├── schema.graphql
├── schema1.graphql
├── schema2.graphql
└── schema3.graphql
控制台命令示例
lighthouse:clear-cache 命令用于管理 GraphQL 模式的缓存。以下是一些可用用法:
1 - 清除所有模式缓存
要清除所有 GraphQL 模式的缓存,请运行以下命令:
php artisan lighthouse:clear-cache
此命令将删除所有缓存的模式文件,确保对模式的任何更改都会在下一次访问时反映出来。
2 - 清除特定模式的缓存
您也可以通过将 {keyYourSchema}
替换为所需的模式名称来清除任何其他模式的缓存
php artisan lighthouse:clear-cache {keyYourSchema}
示例
php artisan lighthouse:clear-cache schema1
将 {keyYourSchema}
替换为要针对其实施的模式的实际名称。这将仅删除该模式的缓存。
端点模式
模式 1:在 domain.local/schema1-graphql
处访问 GraphQL 模式
模式 2:在 domain.local/schema2-graphql
处访问 GraphQL 模式
模式 3:在 domain.local/schema3-graphql
处访问 GraphQL 模式
使用方法
一旦配置完毕,您就可以在应用程序中使用每个模式的定义路由。每个路由将利用其对应的 GraphQL 模式。您拥有一个多模式设置,允许无限数量的访问点,每个访问点都支持各种针对特定需求定制的突变和查询。您可以根据项目要求定义每个模式。这种灵活性允许您为应用程序的不同部分创建不同的模式,确保每个区域都可以根据需要定制查询和突变。
作者