thinkphp的自定义返回类型具体是如何使用的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp的自定义返回类型具体是如何使用的?相关的知识,希望对你有一定的参考价值。

关于thinkphp中的自定义返回类型怎么用,那位大虾给讲解一下最好给个例子!小弟不胜感激!

参考技术A 1.PHP基础,函数的使用,自定义函数,变量的作用域,“&”的作用等等,都 是基础的东西。 2.OOP,传说中的面向对象,这个怎么说呢,说复杂也复杂,说

如何使用 graphene-django 定义突变的自定义输出类型?

【中文标题】如何使用 graphene-django 定义突变的自定义输出类型?【英文标题】:How can I define custom output types for mutations with graphene-django? 【发布时间】:2020-05-19 23:34:56 【问题描述】:

创建/删除/更新/删除 (CRUD) 突变通常返回相应的数据库模型实例作为突变的输出类型。但是对于非 CRUD 突变,我想定义业务逻辑特定的突变输出类型。例如。返回列表元素的计数 + 无法在 graphql 类型和 db 模型之间一对一映射的 ID 列表。如何使用graphene-django 实现这一目标?

【问题讨论】:

您的意思是返回与某个模型相关的 ID 列表?还是一些随机列表? @pedrobern 我的意思首先是与模型/ID 无关的输出。我已经调整了问题以使其更清楚。 我已经编辑了我的答案,看看它现在是否有效 【参考方案1】:

与模型无关的列表

由于您想返回计数和元素列表,您可以创建自定义类型:

class ListWithCountType(graphene.Scalar):

    @staticmethod
    def serialize(some_argument):
        # make computation here
        count = ...
        some_list = ...
        return  "count": count, "list": some_list 

然后在你的突变上你像这样使用它:

class MyMutation(graphene.Mutation):
    list_with_count = graphene.Field(ListWithCountType)

    @classmethod
    def mutate(cls, root, info, **kwargs):
        some_argument = kwargs.pop("some_argument")
        return cls(list_with_count=some_argument)

添加到您的架构:

class Query(graphene.ObjectType):
    my_mutation = MyMutation.Field()

应该返回类似:


  "data": 
    "list_with_count": 
      "count": <COUNT VALUE>,
      "list": <SOME_LIST VALUE>
    
  


*PS:如果这只是一个输出,好的。但是如果你想让这个类型成为一个参数,除了“serialize”之外,你还应该实现“parse_literal”和“parse_value”。

Here 是一个带有与表单一起使用的自定义 ErrorType 的示例。

与模型相关的列表

来自docs:

# cookbook/ingredients/schema.py

import graphene

from graphene_django.types import DjangoObjectType

from cookbook.ingredients.models import Category


class CategoryType(DjangoObjectType):
    class Meta:
        model = Category

class Query(object):
    all_categories = graphene.List(CategoryType)

    def resolve_all_categories(self, info, **kwargs):
        return Category.objects.all()

在您的架构上:

import graphene

import cookbook.ingredients.schema


class Query(cookbook.ingredients.schema.Query, graphene.ObjectType):
    pass

schema = graphene.Schema(query=Query)

然后你可以像这样查询:

query 
  allCategories 
    id
  

应该返回类似:


  "data": 
    "allCategories": [
      
        "id": "1",
      ,
      
        "id": "2",
      ,
      
        "id": "3",
      ,
      
        "id": "4",
      
    ]
  

这是example with user model。

【讨论】:

以上是关于thinkphp的自定义返回类型具体是如何使用的?的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP如何防止SQL注入?

如何将从webapi返回的自定义对象数组的HttpResponse响应分配给打字稿角度中相同数组类型的对象?

ThinkPHP3.2.3整合smarty模板

Access 中的自定义函数返回类型转换错误

如何在数组的自定义类对象中使用 DefineProperties - Delphi

WCF 返回空的自定义集合类型