PHPackages                             youshido/graphql-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. youshido/graphql-bundle

ActiveLibrary[API Development](/categories/api)

youshido/graphql-bundle
=======================

Symfony GraphQl Bundle

v1.4.1(6y ago)282228.0k—6.3%45[6 issues](https://github.com/Youshido/graphql-bundle/issues)[5 PRs](https://github.com/Youshido/graphql-bundle/pulls)5MITPHPPHP &gt;=5.6

Since Jan 14Pushed 1y ago12 watchersCompare

[ Source](https://github.com/Youshido/graphql-bundle)[ Packagist](https://packagist.org/packages/youshido/graphql-bundle)[ RSS](/packages/youshido-graphql-bundle/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (9)Dependencies (4)Versions (45)Used By (5)

Symfony GraphQl Bundle
======================

[](#symfony-graphql-bundle)

### This is a bundle based on the pure [PHP GraphQL Server](http://github.com/youshido/graphql/) implementation

[](#this-is-a-bundle-based-on-the-pure-php-graphql-server-implementation)

This bundle provides you with:

- Full compatibility with the [RFC Specification for GraphQL](https://facebook.github.io/graphql/)
- Agile object oriented structure to architect your GraphQL Schema
- Intuitive Type system that allows you to build your project much faster and stay consistent
- Built-in validation for the GraphQL Schema you develop
- Well documented classes with a lot of examples
- Automatically created endpoint /graphql to handle requests

**There are simple demo application to demonstrate how we build our API, see [GraphQLDemoApp](https://github.com/Youshido/GraphQLDemoApp).**

Table of Contents
-----------------

[](#table-of-contents)

- [Installation](#installation)
- [Symfony features included](#symfony-features-included)
    - [AbstractContainerAwareField class](#class-abstractcontainerawarefield)
    - [Service method as callable](#service-method-as-callable)
    - [Security](#security)
- [Documentation](#documentation)

Installation
------------

[](#installation)

We assume you have `composer`, if you're not – install it from the [official website](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx).
If you need any help installing Symfony framework – here's the link .

> Shortcut to install Symfony: `composer create-project symfony/framework-standard-edition my_project_name`

Once you have your composer up and running – you're ready to install the GraphQL Bundle.
Go to your project folder and run:

```
composer require youshido/graphql-bundle
```

Then enable bundle in your `app/AppKernel.php`

```
new Youshido\GraphQLBundle\GraphQLBundle(),
```

Add the routing reference to the `app/config/routing.yml`:

```
graphql:
    resource: "@GraphQLBundle/Controller/"
```

or

```
graphql:
    resource: "@GraphQLBundle/Resources/config/route.xml"
```

If you don't have a web server configured you can use a bundled version, simply run `php bin/console server:run`.

Let's check if you've done everything right so far – try to access url `localhost:8000/graphql`.
You should get a JSON response with the following error:

```
{"errors":[{"message":"Schema class does not exist"}]}
```

That's because there was no GraphQL Schema specified for the processor yet. You need to create a GraphQL Schema class and set it inside your `app/config/config.yml` file.

> There is a way where you can use inline approach and do not create a Schema class, in order to do that you have to define your own GraphQL controller and use a `->setSchema` method of the processor to set the Schema.

The fastest way to create a Schema class is to use a generator shipped with this bundle:

```
php bin/console graphql:configure AppBundle
```

Here *AppBundle* is a name of the bundle where the class will be generated in.
You will be requested for a confirmation to create a class.

After you've added parameters to the config file, try to access the following link in the browser – `http://localhost:8000/graphql?query={hello(name:World)}`

> Alternatively, you can execute the same request using CURL client in your console
> `curl http://localhost:8000/graphql --data "query={ hello(name: \"World\") }"`

Successful response from a test Schema will be displayed:

```
{"data":{"hello":"world!"}}
```

That means you have GraphQL Bundle for the Symfony Framework configured and now can architect your GraphQL Schema:

Next step would be to link assets for GraphiQL Explorer by executing:

```
php bin/console assets:install --symlink
```

Now you can access it at `http://localhost:8000/graphql/explorer`

Symfony features
----------------

[](#symfony-features)

### Class AbstractContainerAwareField:

[](#class-abstractcontainerawarefield)

AbstractContainerAwareField class used for auto passing container to field, add ability to use container in resolve function:

```
class RootDirField extends AbstractContainerAwareField
{

    /**
     * @inheritdoc
     */
    public function getType()
    {
        return new StringType();
    }

    /**
     * @inheritdoc
     */
    public function resolve($value, array $args, ResolveInfo $info)
    {
        return $this->container->getParameter('kernel.root_dir');
    }

    /**
     * @inheritdoc
     */
    public function getName()
    {
        return 'rootDir';
    }
```

### Service method as callable:

[](#service-method-as-callable)

Ability to pass service method as resolve callable:

```
$config->addField(new Field([
    'name'    => 'cacheDir',
    'type'    => new StringType(),
    'resolve' => ['@resolve_service', 'getCacheDir']
]))
```

### Events:

[](#events)

You can use the Symfony Event Dispatcher to get control over specific events which happen when resolving graphql queries.

```
namespace ...\...\..;

use Youshido\GraphQL\Event\ResolveEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class MyGraphQLResolveEventSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            'graphql.pre_resolve'  => 'onPreResolve',
            'graphql.post_resolve' => 'onPostResolve'
        ];
    }

    public function onPreResolve(ResolveEvent $event)
    {
		//$event->getFields / $event->getAstFields()..
    }

    public function onPostResolve(ResolveEvent $event)
    {
		//$event->getFields / $event->getAstFields()..
    }
}
```

#### Configuration

[](#configuration)

Now configure you subscriber so events will be caught. This can be done in Symfony by either XML, Yaml or PHP.

```

```

### Security:

[](#security)

Bundle provides two ways to guard your application: using black/white operation list or using security voter.

#### Black/white list

[](#blackwhite-list)

Used to guard some root operations. To enable it you need to write following in your config.yml file:

```
graphql:

  #...

  security:
    black_list: ['hello'] # or white_list: ['hello']
```

#### Using security voter:

[](#using-security-voter)

Used to guard any field resolve and support two types of guards: root operation and any other field resolving (including internal fields, scalar type fields, root operations). To guard root operation with your specified logic you need to enable it in configuration and use `SecurityManagerInterface::RESOLVE_ROOT_OPERATION_ATTRIBUTE` attribute. The same things need to do to enable field guard, but in this case use `SecurityManagerInterface::RESOLVE_FIELD_ATTRIBUTE` attribute. [Official documentation](http://symfony.com/doc/current/security/voters.html) about voters.

> Note: Enabling field security lead to a significant reduction in performance

Config example:

```
graphql:
    security:
        guard:
            field: true # for any field security
            operation: true # for root level security
```

Voter example (add in to your `services.yml` file with tag `security.voter`):

```
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Youshido\GraphQL\Execution\ResolveInfo;
use Youshido\GraphQLBundle\Security\Manager\SecurityManagerInterface;

class GraphQLVoter extends Voter
{

    /**
     * @inheritdoc
     */
    protected function supports($attribute, $subject)
    {
        return in_array($attribute, [SecurityManagerInterface::RESOLVE_FIELD_ATTRIBUTE, SecurityManagerInterface::RESOLVE_ROOT_OPERATION_ATTRIBUTE]);
    }

    /**
     * @inheritdoc
     */
    protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
    {
        // your own validation logic here

        if (SecurityManagerInterface::RESOLVE_FIELD_ATTRIBUTE == $attribute) {
            /** @var $subject ResolveInfo */
            if ($subject->getField()->getName() == 'hello') {
                return false;
            }

            return true;
        } elseif (SecurityManagerInterface::RESOLVE_ROOT_OPERATION_ATTRIBUTE == $attribute) {
            /** @var $subject Query */
            if ($subject->getName() == '__schema') {
                return true;
            }
        }
    }
}
```

GraphiQL extension:
-------------------

[](#graphiql-extension)

To run [graphiql extension](https://github.com/graphql/graphiql) just try to access to `http://your_domain/graphql/explorer`

Documentation
-------------

[](#documentation)

All detailed documentation is available on the main GraphQL repository – .

###  Health Score

49

—

FairBetter than 95% of packages

Maintenance26

Infrequent updates — may be unmaintained

Popularity52

Moderate usage in the ecosystem

Community36

Small or concentrated contributor base

Maturity71

Established project with proven stability

 Bus Factor1

Top contributor holds 51.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~30 days

Recently: every ~218 days

Total

43

Last Release

2483d ago

Major Versions

v0.1.3 → v1.0.02016-06-02

v1.2.4 → 2.0.x-dev2017-02-28

PHP version history (2 changes)v0.0.2PHP &gt;=5.5

2.0.x-devPHP &gt;=5.6

### Community

Maintainers

![](https://www.gravatar.com/avatar/d7bd516efdafe6bdc231232038920cdde369881c31c7d2b480e53b6205744b70?d=identicon)[portey](/maintainers/portey)

![](https://www.gravatar.com/avatar/b9a7aeaad78abc0aa0445550a50397344caa6f27120403da89fda2567edac203?d=identicon)[mounter](/maintainers/mounter)

---

Top Contributors

[![portey](https://avatars.githubusercontent.com/u/1961696?v=4)](https://github.com/portey "portey (94 commits)")[![viniychuk](https://avatars.githubusercontent.com/u/1412341?v=4)](https://github.com/viniychuk "viniychuk (59 commits)")[![keesschepers](https://avatars.githubusercontent.com/u/915930?v=4)](https://github.com/keesschepers "keesschepers (4 commits)")[![pdziok](https://avatars.githubusercontent.com/u/9324392?v=4)](https://github.com/pdziok "pdziok (4 commits)")[![iainmckay](https://avatars.githubusercontent.com/u/1223726?v=4)](https://github.com/iainmckay "iainmckay (4 commits)")[![mrexclamation](https://avatars.githubusercontent.com/u/3123405?v=4)](https://github.com/mrexclamation "mrexclamation (3 commits)")[![symm](https://avatars.githubusercontent.com/u/69390?v=4)](https://github.com/symm "symm (2 commits)")[![LiFeAiR](https://avatars.githubusercontent.com/u/851642?v=4)](https://github.com/LiFeAiR "LiFeAiR (1 commits)")[![Biromain](https://avatars.githubusercontent.com/u/1443257?v=4)](https://github.com/Biromain "Biromain (1 commits)")[![mickaelvieira](https://avatars.githubusercontent.com/u/3251585?v=4)](https://github.com/mickaelvieira "mickaelvieira (1 commits)")[![mloureiro](https://avatars.githubusercontent.com/u/3427665?v=4)](https://github.com/mloureiro "mloureiro (1 commits)")[![m-naw](https://avatars.githubusercontent.com/u/1231338?v=4)](https://github.com/m-naw "m-naw (1 commits)")[![paaacman](https://avatars.githubusercontent.com/u/314534?v=4)](https://github.com/paaacman "paaacman (1 commits)")[![sebastienva](https://avatars.githubusercontent.com/u/4148039?v=4)](https://github.com/sebastienva "sebastienva (1 commits)")[![MGDSoft](https://avatars.githubusercontent.com/u/3816465?v=4)](https://github.com/MGDSoft "MGDSoft (1 commits)")[![dkreuer](https://avatars.githubusercontent.com/u/461576?v=4)](https://github.com/dkreuer "dkreuer (1 commits)")[![eliecharra](https://avatars.githubusercontent.com/u/6154987?v=4)](https://github.com/eliecharra "eliecharra (1 commits)")[![elvismdev](https://avatars.githubusercontent.com/u/3847077?v=4)](https://github.com/elvismdev "elvismdev (1 commits)")[![i-melnichenko](https://avatars.githubusercontent.com/u/5779974?v=4)](https://github.com/i-melnichenko "i-melnichenko (1 commits)")[![JeremyGreaux](https://avatars.githubusercontent.com/u/1903212?v=4)](https://github.com/JeremyGreaux "JeremyGreaux (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/youshido-graphql-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/youshido-graphql-bundle/health.svg)](https://phpackages.com/packages/youshido-graphql-bundle)
```

###  Alternatives

[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[facebook/php-business-sdk

PHP SDK for Facebook Business

90821.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

74513.7M114](/packages/meilisearch-meilisearch-php)[google/common-protos

Google API Common Protos for PHP

173103.7M50](/packages/google-common-protos)[hubspot/api-client

Hubspot API client

23914.2M16](/packages/hubspot-api-client)[botman/driver-telegram

Telegram driver for BotMan

92437.3k6](/packages/botman-driver-telegram)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
