You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:30:45