如何重写Lighthouse默认@where指令?以WhereDirective.php为例
重写Lighthouse默认@where指令的方案
可以直接重写@where指令,不需要自定义新指令,核心是利用Laravel的服务容器替换默认的指令实现类,步骤如下:
- 第一步:创建自定义的WhereDirective类,继承Lighthouse原有的WhereDirective,重写需要修改的方法
<?php namespace App\GraphQL\Directives; use Nuwave\Lighthouse\Schema\Directives\WhereDirective as BaseWhereDirective; class WhereDirective extends BaseWhereDirective { // 重写你需要调整的方法,比如处理构建器的handleBuilder public function handleBuilder($builder, $value) { // 可先复用父类逻辑,再追加自定义处理 $builder = parent::handleBuilder($builder, $value); // 这里添加你的自定义构建器方法支持逻辑 if (method_exists($builder, 'yourCustomBuilderMethod')) { $builder->yourCustomBuilderMethod($value); } return $builder; } }
- 第二步:在Laravel服务提供者中替换默认绑定
打开App\Providers\AppServiceProvider.php,在register方法中添加绑定替换逻辑:
public function register() { // 用自定义类替换Lighthouse默认的WhereDirective $this->app->bind( \Nuwave\Lighthouse\Schema\Directives\WhereDirective::class, \App\GraphQL\Directives\WhereDirective::class ); }
这样配置后,Lighthouse在解析@where指令时,会自动使用你自定义的实现类,不需要修改任何核心代码,也不用替换schema中的@where为新指令,完全满足你想要的优雅重写需求。
内容的提问来源于stack exchange,提问作者Steve Moretz
相关产品推荐
相关产品推荐

