Skip to content

Type Definitions

graphql-php represents a type as a class instance from the GraphQL\Type\Definition namespace:

Input vs. Output Types

All types in GraphQL are of two categories: input and output.

Obviously, NonNull and List types belong to both categories depending on their inner type.

Definition styles

Several styles of type definitions are supported depending on your preferences.

Inline definitions

<?php
namespace MyApp;

use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;

$myType = new ObjectType([
    'name' => 'MyType',
    'fields' => [
        'id' => Type::id()
    ]
]);

Class per type

<?php
namespace MyApp;

use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;

class MyType extends ObjectType
{
    public function __construct()
    {
        $config = [
            // Note: 'name' is not needed in this form:
            // it will be inferred from class name by omitting namespace and dropping "Type" suffix
            'fields' => [
                'id' => Type::id()
            ]
        ];
        parent::__construct($config);
    }
}

Schema definition language

schema {
    query: Query
    mutation: Mutation
}

type Query {
    greetings(input: HelloInput!): String!
}

input HelloInput {
    firstName: String!
    lastName: String
}

Read more about building an executable schema using schema definition language.