我想创建一个简单的GrapQL指令@round
,用于将浮点数舍入到设定的精度。
我设法让它工作,但解决方案困扰着我,我觉得我做错了一些事情。
这是我的简单类型,在sum
字段中我使用@round
指令。
type StatsPriceOutput {
count: Int!
sum: Float! @round(precision: 4)
}
RoundDirective
的类:
final class RoundDirective extends BaseDirective implements FieldResolver
{
public static function definition(): string {
return /** @lang GraphQL */ <<<'GRAPHQL'
directive @round(precision: Int = 2) on FIELD_DEFINITION
GRAPHQL;
}
public function resolveField(FieldValue $fieldValue): FieldValue {
$fieldValue->setResolver(function ($value) use ($fieldValue) { // $value returns both fields: count and sum. Expecting only sum
$fieldName = $fieldValue->getFieldName();
$precision = $this->directiveArgValue('precision', 2);
return round($value[$fieldName], $precision);
});
return $fieldValue;
}
}
我觉得我做错了什么,因为我清楚地在sum
字段上设置了@round
指令,但在$fieldValue->setResolver
中,$value
返回两个字段['count' => 'some value', 'sum' => 'some other value']
的数组。$value
变量的转储:
我做错什么了吗?
1条答案
按热度按时间tp5buhyn1#
setResolver接受具有以下签名解析器闭包:
要实现您想要的,使用FieldMiddleware更简单。
下面的实现假设你在Lighthouse 6.x上,使用Lighthouse 5的语法有点不同,请查看文档以获得适当的版本:https://lighthouse-php.com/master/custom-directives/getting-started.html#directive-interfaces