Code Monkey home page Code Monkey logo

laravel-actions-lighthouse's Introduction

Laravel Actions Lighthouse

Create Actions with Laravel Actions that are resolved by Lighthouse allowing a GraphQL query/mutation to hit an action directly.

Install

composer require petecoop/laravel-actions-lighthouse

GraphQL Actions

Add the AsGraphQL trait to your action:

use Petecoop\LaravelActionsLighthouse\AsGraphQL;

class SomeAction
{
    use AsAction, AsGraphQL;
}

This is resolved based on name of the query in your schema.graphql:

type Query {
    someAction: SomeResult
}

Ensure you register the path to the handler in config/lighthouse.php this may need to be published first: php artisan vendor:publish --tag=lighthouse-config

If adding a mutation then add to mutations - this needs to be done for each folder of actions

[
    'namespaces' => [
        'queries' => [
            'App\\GraphQL\\Queries',
            'App\\Actions',
            'App\\Actions\\User',
        ],
    ]
]

You can then use the args from GraphQL directly in your handler:

type Mutation {
    updateUserName(id: ID!, name: String!): User!
}

The arguments are passed in as named arguments to the handle method:

class UpdateUserName
{
    use AsAction, AsGraphQL;

    public function handle(string $id, string $name)
    {
        //...
    }
}

Or use asGraphQL to pull out args from the graphql query, useful if you want to have more control over the args:

class SomeAction
{
    use AsAction, AsGraphQL;

    public function handle(int $userId, string $name)
    {
        //...
    }

    public function asGraphQL($_, $args)
    {
        return $this->handle($args['id'], $args['name']);
    }
}

Validation

You can use Laravel Action Validation Rules by using the @actionValidator directive.

Add "Petecoop\\LaravelActionsLighthouse" to your config/lighthouse.php:

"directives" => ["App\\GraphQL\\Directives", "Petecoop\\LaravelActionsLighthouse"],

for example:

type Mutation {
    updateUserName(id: ID!, name: String!): User! @actionValidator
}

rules(), getValidationMessages() and getValidationAttributes() currently work.

class UpdateUserName
{
    use AsAction, AsGraphQL;

    public function handle(string $id, string $name)
    {
        //...
    }

    public function rules(): array
    {
        return [
            'name' => ['required', 'min:3'],
        ];
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.