Laravel Graphql Mutation 時資料驗證及複雜格式資料輸入 (InputObjectType)

mution發表於2019-07-09

1.使用Laravel Graphql的擴充套件支援直接新增rules()方法進行資料的驗證:

class ConfigMutation extends Mutation
{
protected $attributes = [
  'name' => 'ConfigMutation',
  'description' => 'A mutation of Config'
];
public function type()
{
  return Type::boolean();
}

public function rules()
{
  return [
      /*驗證----------->start*/
        'config.aaa' => 'required|array',
      ]
  }
}

2.如歌輸入的資料是多層巢狀的json該怎麼在args()方法中定義對應的欄位呢?目前我使用的是InputObjectType

public function args()
{
    return [
      'AAA_id' => [
          'name' => 'AAA_id', 'type' => Type::nonNull(Type::int()), 'description' => 'AAAid'\
      ],
      'type' => [
          'name' => 'type', 'type' => Type::nonNull(GraphQL::type('TypeEnum')), 'description' => '選擇的平臺'\
      ],
      'config' => [
          'name' => 'config', 'type' => Type::nonNull($config), 'description' => '配置'\
      ]
    ];
}

上面的config是一個複雜的json資料,每個key對應的值有可能是基本的型別,也有可能是陣列,此時可以這樣:

$config = new InputObjectType([
           'name' => 'ConfigFiltersInput',
           'fields' => [
               'aa_info' => [
                   'name' => 'aa_info', 'type' => Type::nonNull($setting), 'description' => 'aaa資訊'
               ],
               'aaa_feature' => [
                   'name' => 'aaa_feature', 'type' => Type::nonNull($setting), 'description' => 'aaa特色'
               ],
               'aaa_ranking' => [
                   'name' => 'aaa_ranking', 'type' => ($aaa_ranking), 'description' => 'aaa排行'
               ]
           ]
       ]);

上例中$setting也是一個InputObjectType,對應需要定義的資料
通過使用InputObjectType可以靈活處理所有複雜的輸入資料,同時如果輸入的資料是一個json中的陣列該如何處理呢?

 'setting' => [
       'name' => 'setting', 'type' => Type::nonNull(Type::listOf($filters)), 'description' => '許可權'
],

$filters是自己定義的InputObjectType,通過使用listOf可以處理陣列資料

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章