如何在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
相关产品推荐
相关产品推荐

