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

如何在webonyx/graphql中创建递归层级?解决变量未初始化问题

解决webonyx/graphql PHP中循环引用类型初始化问题

你遇到的是循环引用类型初始化的问题——Options类型依赖Field类型,而Field又依赖Options,按顺序初始化时$fieldType还未定义就被调用。下面是两种常用的解决办法:

方法一:用闭包延迟解析类型

利用webonyx支持字段type值为闭包的特性,延迟获取类型,确保$fieldType初始化完成后再解析:

$fieldOptionsType = new ObjectType([
    'name' => 'Options',
    'fields' => [
        'nested' => [
            'type' => function() use (&$fieldType) {
                return Type::listOf($fieldType);
            },
        ],
    ],
]);

$fieldType = new ObjectType([
    'name' => 'Field',
    'fields' => [
        'options' => [
            'type' => $fieldOptionsType,
        ],
    ],
]);

这里通过&$fieldType引用变量,保证闭包能访问到后续初始化的$fieldType对象。

方法二:直接使用类型名称字符串引用

webonyx会自动在已注册的类型中查找对应名称的类型,这种方式更简洁:

$fieldOptionsType = new ObjectType([
    'name' => 'Options',
    'fields' => [
        'nested' => [
            'type' => Type::listOf('Field'), // 直接用目标类型的名称字符串
        ],
    ],
]);

$fieldType = new ObjectType([
    'name' => 'Field',
    'fields' => [
        'options' => [
            'type' => $fieldOptionsType,
        ],
    ],
]);

注意:类型名称必须唯一,且后续创建的Field类型名称要和此处的字符串完全一致。

内容的提问来源于stack exchange,提问作者user12828000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:40:38