是否可以在GraphQL中创建多字段标量

时间:2019-09-16 13:55:52

标签: php graphql graphql-php

我以一对字段的形式存储价格:金额和货币。
如果我使用InputTypes,overblog / GraphQLBundle将以数组形式而不是Money对象的形式给我结果。

对于单个字段标量,我能够使用映射器将其自动转换为对象:

DateTime:
  type: custom-scalar
  config:
    scalarType: '@=newObject("App\\GraphQL\\Type\\DateTimeType")'
class DateTimeType extends ScalarType
{
    const FORMAT = 'Y-m-d H:i:s';

    public function serialize($value)
    {
        return $value->format(self::FORMAT);
    }

    public function parseValue($value)
    {
        return DateTime::createFromFormat(self::FORMAT, $value);
    }

    public function parseLiteral($valueNode, ?array $variables = null)
    {
        return DateTime::createFromFormat(self::FORMAT, $valueNode->value);
    }
}

我可以对多场标量做同样的事情吗?
如果是,那怎么办?

这大致就是我想要的:

InputPrice:
  type: input-object
  config:
    scalarType: '@=newObject("App\\GraphQL\\Type\\PriceType")'
    fields:
      amount:
        type: Int!
      currency:
        type: String!
class MoneyType extends ScalarType
{
    public function serialize($money)
    {
        /** @var \Money\Money $money */

        return [
            'amount' => $money->getAmount(),
            'currency' => $money->getCurrency()->getCode(),
        ];
    }

    public function parseValue($value)
    {
        return new \Money\Money($value['amount'], new \Money\Currency($value['currency']));
    }
}

0 个答案:

没有答案