This bundle provides tools to build a complete GraphQL server in your Symfony App.

Overview

OverblogGraphQLBundle

CI Build status Scrutinizer Code Quality Coverage Status Latest Stable Version Latest Unstable Version Total Downloads

This Symfony bundle provides integration of GraphQL using webonyx/graphql-php and GraphQL Relay. It also supports:

Browse your version documentation:

Versions requirements

Proof of Concept

Documentation

Talks and slides to help you start

Community

Contributing

Comments
  • Be compatible with Symfony Flex

    Be compatible with Symfony Flex

    | Q | A | ---------------- | ----- | Bug report? | no | Feature request? | yes | BC Break report? | no | RFC? | no | Version/Branch | 0.9.*

    Hello,

    During the past few days I've been doing some work to make this bundle compatible with symfony flex, the related PRs are: #186 #187 #191

    After that I was able to install the bundle easily on it, now I have a PR on symfony flex, please check it: https://github.com/symfony/recipes/pull/183 Edited: Check https://github.com/symfony/recipes-contrib/pull/85 for progress

    Please check if it's accordingly to the bundle, I've added configuration for the routes and now it should work out of the box.

    Also, releasing a new tag will help the process, since the recipes must determine the minimal version for the package

    opened by renatomefi 68
  • GraphQL Profiler

    GraphQL Profiler

    | Q | A | ------------- | --- | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | License | MIT

    This PR add a GraphQL Data Collector allowing to watch the queries and the results.

    tests needed feature 
    opened by Vincz 34
  • [FEATURES] Generate type from entity

    [FEATURES] Generate type from entity

    | Q | A | ---------------- | ----- | Bug report? | no | Feature request? | yes | BC Break report? | no | RFC? | no | Version/Branch | *

    Hi,

    Thanks a lot for your bundle, it's amazing ! However, i see a features not included in your bundle, but really appreciate i think: just one command to generate all types from the entities.

    This is an example of command, based on SF4 and not configurable, just for the example:

    <?php
    namespace App\Command;
    
    use Doctrine\ORM\EntityManagerInterface;
    use Symfony\Component\Console\Command\Command;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;
    use Symfony\Component\Yaml\Yaml;
    
    class CreateEntitySchemaCommand extends Command
    {
        /** @var EntityManagerInterface */
        protected $entityManager;
    
        /**
         * DebugCommand constructor.
         *
         * @param DataforseoCommonService $dataforseoService
         * @param EntityManagerInterface  $entityManager
         */
        public function __construct(EntityManagerInterface $entityManager)
        {
            $this->entityManager = $entityManager;
            $this->entityManager->getConnection()->getConfiguration()->setSQLLogger(null);
    
            parent::__construct();
        }
    
        /**
         * Configure
         */
        protected function configure()
        {
            $this
                ->setName('app:graphql:generate:schema')
                ->addArgument('entitiesDirectory', InputArgument::OPTIONAL, '', __DIR__.'/../Entity/')
                ->setDescription('Generate schema entity');
        }
    
        /**
         * Execute cmd
         *
         * @param InputInterface $input
         * @param OutputInterface $output
         *
         * @return int|null|void
         *
         * @throws \Exception
         */
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            $configTypeDir = __DIR__.'/../../config/graphql/types/';
            $directory = $input->getArgument('entitiesDirectory');
            $scanned_directory = array_diff(scandir($directory), array('..', '.'));
    
            foreach ($scanned_directory as $file) {
                if (strpos($file, '.php')) {
                    $fileContent = file_get_contents($directory.$file);
                    if (!strpos($fileContent, '@ORM\Entity')) {
                        continue;
                    }
    
                    $entityName = substr($file, 0, -4);
                    preg_match('#namespace (.+);#', $fileContent, $namespace);
                    $className = $namespace[1].'\\'.$entityName;
    
                    $output->writeln('Creating '.$entityName.' types...');
    
                    $metadata = $this->entityManager->getClassMetadata($className);
    
                    $configFile = $configTypeDir.$entityName.'.types.yaml';
                    $yamlConfig = array();
                    $yamlConfig[$entityName] = [
                        'type' => 'object',
                        'config' => [
                            'description' => $entityName . ' type',
                            'fields' => [],
                        ],
                    ];
    
                    foreach ($metadata->fieldMappings as $field) {
                        $yamlConfig[$entityName]['config']['fields'][$field['fieldName']] = [
                            'type' => $this->getGraphQLType($field['type'], $field['fieldName'], $field['nullable']),
                        ];
                    }
    
                    foreach ($metadata->associationMappings as $association) {
                        $type = preg_replace('#^.+\\\\([^\\\\]+)$#', '$1', $association['targetEntity']);
                        $isArray = false;
                        switch ($association['type']) {
                            case 4:
                                $isArray = true;
                                break;
                        }
    
                        if ($isArray) {
                            $type = '['.$type.']';
                        }
    
                        $yamlConfig[$entityName]['config']['fields'][$association['fieldName']] = [
                            'type' => $type,
                        ];
                    }
    
                    $yamlConfig = Yaml::dump($yamlConfig, 5);
                    file_put_contents($configFile, $yamlConfig);
                    $output->writeln($configFile.' created!');
                }
            }
        }
    
        /**
         * @param string $type
         * @param string $name
         * @param bool   $nullable
         *
         * @return null|string
         */
        protected function getGraphQLType($type, $name, $nullable) {
            $newType = null;
            switch ($type) {
                case 'integer';
                    $newType = 'Int';
                    break;
                case 'string':
                case 'text':
                    $newType = 'String';
                    break;
                case 'date':
                case 'datetime':
                    $newType = 'DateTime';
                    break;
                case 'boolean':
                    $newType = 'Boolean';
                    break;
                case 'float':
                    $newType = 'Float';
                    break;
                case 'array':
                    $newType = 'String';
                    break;
                default:
                    dump($type);
                    die;
            }
    
            if ($name === 'id') {
                $newType = 'ID';
            }
    
            if (!$nullable) {
                $newType .= '!';
            }
    
            return $newType;
        }
    }
    
    feature 
    opened by CocoJr 31
  • Annotations refactoring & PHP 8 Attributes

    Annotations refactoring & PHP 8 Attributes

    | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | yes | Tests pass? | yes | Documented? | partly | Fixed tickets | #707

    opened by Vincz 28
  • non-existent parameter

    non-existent parameter "container.build_id"

    hi, somehow I got this error, any fix please? I'm using Symfony4 and the master branch of this bundle commited at 7f4be04.

    Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException: You have requested a non-existent parameter "container.build_id". in /Users/john/www/acme-application/vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php:100
    Stack trace:
    #0 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php(67): Symfony\Component\DependencyInjection\ParameterBag\ParameterBag->get('container.build...')
    #1 /Users/john/www/acme-application/vendor/symfony/dependency-injection/Container.php(112): Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag->get('container.build...')
    #2 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1268): Symfony\Component\DependencyInjection\Container->getParameter('container.build...')
    #3 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Parameter), Array, false)
    #4 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1114): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
    #5 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'cache.validator')
    #6 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('cache.validator', 1, Array, false)
    #7 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #8 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1114): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
    #9 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, '.1_PhpArrayAdap...')
    #10 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('.1_PhpArrayAdap...', 1, Array, false)
    #11 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #12 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1114): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
    #13 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'validator.mappi...')
    #14 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('validator.mappi...', 1, Array, false)
    #15 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #16 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1628): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
    #17 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1166): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Symfony\Component\Validator\ValidatorBuilder), Array, Array)
    #18 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'validator.build...')
    #19 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('validator.build...', 1, Array, false)
    #20 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1118): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #21 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'debug.validator...')
    #22 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('debug.validator...', 1, Array, false)
    #23 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #24 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1114): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
    #25 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'debug.validator')
    #26 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('debug.validator', 3, Array, false)
    #27 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #28 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1114): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
    #29 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'Overblog\\GraphQ...')
    #30 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('Overblog\\GraphQ...', 1, Array, false)
    #31 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\TypedReference), Array, false)
    #32 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1114): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
    #33 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'Overblog\\GraphQ...')
    #34 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('Overblog\\GraphQ...', 1, Array, false)
    #35 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #36 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1628): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
    #37 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1166): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Overblog\GraphQLBundle\ExpressionLanguage\ExpressionLanguage), Array, Array)
    #38 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'Overblog\\GraphQ...')
    #39 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1264): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('Overblog\\GraphQ...', 1, Array, false)
    #40 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1212): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
    #41 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1628): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
    #42 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(1166): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Overblog\GraphQLBundle\Generator\TypeGenerator), Array, Array)
    #43 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(610): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true, 'Overblog\\GraphQ...')
    #44 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(588): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('Overblog\\GraphQ...', 1, Array, true)
    #45 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(556): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('overblog_graphq...', 1)
    #46 /Users/john/www/acme-application/vendor/overblog/graphql-bundle/src/DependencyInjection/Compiler/TypeGeneratorPass.php(17): Symfony\Component\DependencyInjection\ContainerBuilder->get('overblog_graphq...')
    #47 /Users/john/www/acme-application/vendor/symfony/dependency-injection/Compiler/Compiler.php(94): Overblog\GraphQLBundle\DependencyInjection\Compiler\TypeGeneratorPass->process(Object(Oro\Component\DependencyInjection\ExtendedContainerBuilder))
    #48 /Users/john/www/acme-application/vendor/symfony/dependency-injection/ContainerBuilder.php(754): Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object(Oro\Component\DependencyInjection\ExtendedContainerBuilder))
    #49 /Users/john/www/acme-application/vendor/symfony/http-kernel/Kernel.php(556): Symfony\Component\DependencyInjection\ContainerBuilder->compile()
    #50 /Users/john/www/acme-application/vendor/symfony/http-kernel/Kernel.php(133): Symfony\Component\HttpKernel\Kernel->initializeContainer()
    #51 /Users/john/www/acme-application/vendor/lchrusciel/api-test-case/src/ApiTestCase.php(80): Symfony\Component\HttpKernel\Kernel->boot()
    #52 phar:///usr/local/Cellar/phpunit/7.3.1/bin/phpunit/phpunit/Framework/TestSuite.php(703): ApiTestCase\ApiTestCase::createSharedKernel()
    #53 phar:///usr/local/Cellar/phpunit/7.3.1/bin/phpunit/phpunit/Framework/TestSuite.php(750): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
    #54 phar:///usr/local/Cellar/phpunit/7.3.1/bin/phpunit/phpunit/TextUI/TestRunner.php(587): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))
    #55 phar:///usr/local/Cellar/phpunit/7.3.1/bin/phpunit/phpunit/TextUI/Command.php(203): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)
    #56 phar:///usr/local/Cellar/phpunit/7.3.1/bin/phpunit/phpunit/TextUI/Command.php(159): PHPUnit\TextUI\Command->run(Array, true)
    #57 /usr/local/Cellar/phpunit/7.3.1/bin/phpunit(595): PHPUnit\TextUI\Command::main()
    #58 {main}
    
    bug 
    opened by videni 25
  • feature/hydrator

    feature/hydrator

    | Q | A | ---------------- | ----- | Bug report? | no | Feature request? | yes | BC Break report? | no | RFC? | yes | Version/Branch | 0.13

    I am currently working on this feature. Its purpose is to automatise population of objects (e.g. Doctrine entities or DTOs) and to integratate it with the validator

    Here is my view of how it should be implemented (not finished).

    Suppose we have 3 entities:

    • User
    • Address
    • Post

    Which are associated with each other: User one-to-one Address User one-to-many Post

    We could then create corresponding GraphQL types:

    Mutation:
        type: object
        config:
            fields:
                createUser:
                    resolve: "@=res('create_user', [args, validator, hydrate])"
                    hydration: App\Entity\User
                    args:
                        username: String!
                        password: String!
                        address: Address!
                        posts: [Post]!
    
    Address:
        type: input-object
        config:
            hydration: App\Entity\Address
            fields:
                street:
                    type: String!
                city:
                    type: String!
                zip:
                    type: Int!
    
    Post:
        type: input-object
        config:
            hydration: App\Entity\Post
            fields:
                title:
                    type: String!
                content:
                    type: String!
    

    The line hydration: App\Entity\User is a shortcut. The full config looks like this:

    hydration:
        class: App\Entity\User
        recursive: true # true by default
        force: false # false by default
        hydrator: App\MyCustomHydrator # null by default
    
    • recursive defines the hydration strategy. If it's false, then only built in GraphQL types will be hydrated into target object (User::address and User::posts will be null)
    • force if recursive is true, but the the referenced type has no hydration configuration, then nothing will be hydrated. Setting this option to true forces hydration even if no hydration is configured (raw array data).
    • hydrator allows more detailed and deep customization.

    In resolver:

    public function createUser(ArgumentInterface $args, ArgumentsValidator $validator, User $user) 
    {
        // The Validator is aware of the hydrator configs and
        // will use constraints defined in the App\Entity\User class
        // and all associated classes recursively.
        $validator->validate();
    
        // $user is an object created by the Hydrator.
        $this->userManager->save($user);
    
        return $user;
    }
    

    Problems

    Naming problem

    Variable name in the expression. I considered different names:

    • dto (Data Transfer Object) - is simple, short and intuitive, but we can also use entities directly, so this name doesn't fit 100%
    • entity - doesn't fit for the same reasons as for dto
    • object and value - already in use
    • subject - may be confused with object.
    • hydratedObject - too long
    • hydrated - ?

    All names above have no direct connection with the hydrator and therefore are not intuitive. I decided to use the name hydrate because it has direct connection with the hydration and is short. hydrate is a noun, not a verb. The term hydration was adopted by the Hibernate ORM and wasn't used in IT before. Doctrine ORM, which is mostly a php copy of Hibernate, also adopted this term. So why not to use the term hydrate to denote objects, which were created in the hydration process?

    I am open to suggestions.

    UPDATE After some thought, I came to the conclusion, that the name hydrate can be confusing due to its similarity to the verb hydrate. What if we allow both entity and dto, which will be aliases to each other and users could choose themselves depending on the use case?

    Validation edgy cases

    Entities don't always have 100% same properties as their corresponding GraphQL types. Suppose we have an entity User:

    class User {
        /** @Assert\...  */
        public $username;
        /** @Assert\...  */
        public $email;
        /** @Assert\...  */
        public $password;
    }
    

    And we want to create a mutation GraphQL type with additional arguments to manipulate profile data:

    Mutation:
        type: object
        config:
            fields:
                updateProfile:
                    resolve: "@=res('update_profile', [args, validator, hydrate])"
                    hydration: App\Entity\User
                    args:
                        username: String!
                        email: String!
                        password: String!
                        # additional arguments
                        about:
                            type: String!
                            validation:
                                - Length: {min: 3, max: 256}
                        preferences:
                            type: String!
                            validation:
                                - Json: ~
    

    We want to update profile data, which includes user data. We have here 2 additional arguments (about and prefrences) which also have validation constraints. Question: how should validation happen in this case?

    The other edgy case by validation is, if we use data transformers to convert input data, before it is hydrated into an object. Should we then validate only data in the object or also the raw value (the value, which was transformed)?

    Data transformers are not yet implemented. They would work together with the Hydrator and Validator.

    What if we use mixed validation constraints (declared both in the yaml and in entity annotations)?

    Answer: We could introduce an option to control the validation strategy. Strategy 1: validates only hydrated entity (DTO), using constraints declared in entity itself. All additional arguments are ignored Strategy 2: validates both, entity and additional arguments, but in this case the validator will use the class ValidationNode to populate it with data, so that everything would be validated in the same context Strategy 3: ignores hydrated object and only validates raw arguments. It is usefull, if users have no DTOs and they want to populate entities directly. They could then just validate arguments and persist hydrated entites.

    If not all GraphQL types have hydration configs:

    Lets take the very first yaml example from this issue. What if there is no hydration configuration in the Mutation type and only in Address and Post? What should the hydrator return? Should we maybe indroduce a standard object to hydrate data into, so that the resulting tree wouldn't be borken?

    feature 
    opened by murtukov 23
  • Fields auto-guessing from Doctrine ORM annotations

    Fields auto-guessing from Doctrine ORM annotations

    | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Documented? | yes | Fixed tickets | #349 | License | MIT

    Annotation GraphQL type guessed from Doctrine ORM annotations

    opened by Vincz 19
  • Endpoint GraphQL Not support Method POST

    Endpoint GraphQL Not support Method POST

    Hello For 3 Days, my project which worked perfectly locally, once put on the production server. GraphQl requests are a failure with the error "[Error: Network error: JSON Parse error: Unrecognized token '<']" and after log analysis it is a 404 error because the route was not found.

    After investigation via the GraphQl Atlair client for chrome by changing the method to GET to make my GrasphQl requests, the error everything works.

    my question is how to work the POST method?

    ### EDIT

    the stack Error complete { "type": "https://tools.ietf.org/html/rfc2616#section-10", "title": "An error occurred", "status": 404, "detail": "No route found for "POST /overblog/graphql"", "class": "Symfony\Component\HttpKernel\Exception\NotFoundHttpException", "trace": [ { "namespace": "", "short_class": "", "class": "", "type": "", "function": "", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/http-kernel/EventListener/RouterListener.php", "line": 136, "args": [] }, { "namespace": "Symfony\Component\HttpKernel\EventListener", "short_class": "RouterListener", "class": "Symfony\Component\HttpKernel\EventListener\RouterListener", "type": "->", "function": "onKernelRequest", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/event-dispatcher/Debug/WrappedListener.php", "line": 126, "args": [ [ "object", "Symfony\Component\HttpKernel\Event\RequestEvent" ], [ "string", "kernel.request" ], [ "object", "Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher" ] ] }, { "namespace": "Symfony\Component\EventDispatcher\Debug", "short_class": "WrappedListener", "class": "Symfony\Component\EventDispatcher\Debug\WrappedListener", "type": "->", "function": "__invoke", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/event-dispatcher/EventDispatcher.php", "line": 264, "args": [ [ "object", "Symfony\Component\HttpKernel\Event\RequestEvent" ], [ "string", "kernel.request" ], [ "object", "Symfony\Component\HttpKernel\Debug\TraceableEventDispatcher" ] ] }, { "namespace": "Symfony\Component\EventDispatcher", "short_class": "EventDispatcher", "class": "Symfony\Component\EventDispatcher\EventDispatcher", "type": "->", "function": "doDispatch", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/event-dispatcher/EventDispatcher.php", "line": 239, "args": [ [ "array", [ [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ] ] ], [ "string", "kernel.request" ], [ "object", "Symfony\Component\HttpKernel\Event\RequestEvent" ] ] }, { "namespace": "Symfony\Component\EventDispatcher", "short_class": "EventDispatcher", "class": "Symfony\Component\EventDispatcher\EventDispatcher", "type": "->", "function": "callListeners", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/event-dispatcher/EventDispatcher.php", "line": 73, "args": [ [ "array", [ [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ], [ "object", "Symfony\Component\EventDispatcher\Debug\WrappedListener" ] ] ], [ "string", "kernel.request" ], [ "object", "Symfony\Component\HttpKernel\Event\RequestEvent" ] ] }, { "namespace": "Symfony\Component\EventDispatcher", "short_class": "EventDispatcher", "class": "Symfony\Component\EventDispatcher\EventDispatcher", "type": "->", "function": "dispatch", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php", "line": 168, "args": [ [ "object", "Symfony\Component\HttpKernel\Event\RequestEvent" ], [ "string", "kernel.request" ] ] }, { "namespace": "Symfony\Component\EventDispatcher\Debug", "short_class": "TraceableEventDispatcher", "class": "Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher", "type": "->", "function": "dispatch", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/http-kernel/HttpKernel.php", "line": 122, "args": [ [ "object", "Symfony\Component\HttpKernel\Event\RequestEvent" ], [ "string", "kernel.request" ] ] }, { "namespace": "Symfony\Component\HttpKernel", "short_class": "HttpKernel", "class": "Symfony\Component\HttpKernel\HttpKernel", "type": "->", "function": "handleRaw", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/http-kernel/HttpKernel.php", "line": 68, "args": [ [ "object", "Symfony\Component\HttpFoundation\Request" ], [ "integer", 1 ] ] }, { "namespace": "Symfony\Component\HttpKernel", "short_class": "HttpKernel", "class": "Symfony\Component\HttpKernel\HttpKernel", "type": "->", "function": "handle", "file": "/home/foongon/website/yamo-mobile-backend/vendor/symfony/http-kernel/Kernel.php", "line": 201, "args": [ [ "object", "Symfony\Component\HttpFoundation\Request" ], [ "integer", 1 ], [ "boolean", true ] ] }, { "namespace": "Symfony\Component\HttpKernel", "short_class": "Kernel", "class": "Symfony\Component\HttpKernel\Kernel", "type": "->", "function": "handle", "file": "/home/foongon/website/yamo-mobile-backend/public/index.php", "line": 25, "args": [ [ "object", "Symfony\Component\HttpFoundation\Request" ] ] } ] }

    the route endpoint with the POST (/overblog/graphql) method refuses to work but with the GET method all is Okay. I don't know how to solve this problem

    I really need to use the METHOD POST for mutations Thanks everyone Very cordially

    opened by ththugues44 18
  • Problem when using XDebug during a query

    Problem when using XDebug during a query

    | Q | A | ---------------- | ----- | Bug report? | yes | Feature request? | no | BC Break report? | yes/no | RFC? | no | Version/Branch | 0.11.13

    When I try to run a query while using XDebug I get the following error and I could not fix it so far:

    Symfony\Component\Finder\Exception\DirectoryNotFoundException: The "vendor\symfony\framework-bundle/GraphQL" directory does not exist.

    Here are my config and the types and resolver: https://gist.github.com/felyx/b2638d147170133efbf8e769849a8c7d

    opened by hblaise 17
  • [BUG] Missing service

    [BUG] Missing service

    | Q | A | ---------------- | ----- | Bug report? | yes | Feature request? | no | BC Break report? | no | RFC? | no | Version/Branch | 0.9.4

    Hi everyone, what's up?

    I've just updated my bundle installation and GraphiQL told me that a service is missing :

    The \"overblog_graphql.request_parser\" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.
    

    I've tried to clear the cache and relaunch the update but the problem still there, does anyone have an idea about this problem?

    Thanks again for the help and have a great day :)

    opened by Guikingone 17
  • Symfony Flex | Resolver usage

    Symfony Flex | Resolver usage

    | Q | A | ---------------- | ----- | Bug report? | yes | Feature request? | no | BC Break report? | no | RFC? | no | Version/Branch | 0.9.1

    Hello everyone,

    As described in the symfony/recipes-contrib repository, I've tried to install the bundle using the recipes allowed, I've finally succeeded to create types and schema but I met a problem with the resolvers, here's the problem.

    I've defined an ImageResolver who's responsible for resolving all the images (or a single one) stored in the BDD (PostgreSQL via Doctrine), here's the class :

    <?php
    
    /*
     * This file is part of the MarketReminder project.
     *
     * (c) Guillaume Loulier <[email protected]>
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */
    
    namespace App\Resolvers;
    
    use App\Models\Image;
    use Doctrine\ORM\EntityManagerInterface;
    use Overblog\GraphQLBundle\Definition\Argument;
    use Overblog\GraphQLBundle\Definition\Resolver\ResolverInterface;
    
    /**
     * Class ImageResolver
     *
     * @author Guillaume Loulier <[email protected]>
     */
    class ImageResolver implements ResolverInterface
    {
        /**
         * @var EntityManagerInterface
         */
        private $entityManager;
    
        /**
         * ImageResolver constructor.
         *
         * @param EntityManagerInterface $entityManagerInterface
         */
        public function __construct(EntityManagerInterface $entityManagerInterface)
        {
            $this->entityManager = $entityManagerInterface;
        }
    
        /**
         * @param Argument $argument
         *
         * @return Image|Image[]|array|null|object
         */
        public function getImage(Argument $argument)
        {
            if ($id = $argument->offsetExists('id')) {
                return $this->entityManager->getRepository(Image::class)
                                           ->findOneBy([
                                               'id' => $id
                                           ]);
            }
    
            return $this->entityManager->getRepository(Image::class)->findAll();
        }
    }
    

    As define in the documentation, here's my services.yml :

    parameters:
        locale: 'en'
    
    services:
        _defaults:
            autowire: true
            autoconfigure: true
            public: false
    
        App\:
            resource: '../src/*'
            exclude: '../src/{Entity,Migrations,Repository}'
    
        App\Controller\:
            resource: '../src/Controller'
            tags: ['controller.service_arguments']
    
        graphql.image_resolver:
            class: App\Resolvers\ImageResolver
            arguments:
                - '@doctrine.orm.entity_manager'
            tags:
                - { name: overblog_graphql.resolver, alias: 'image_id', method: 'getImage' }
    
    

    The tag seems good and the method call is exactly like the method declaration, in accord with the documentation, here's the query.yaml file :

    Query:
        type: object
        config:
            description:
            fields:
                user:
                    type: "User"
                    description: "An user registered into the application"
                    args:
                        id:
                            type: "Int"
                            description: "The id of the User"
                    resolve: "@resolver=('user_id', [args])"
                image:
                    type: "Image"
                    description: "An image linked to an user"
                    args:
                        id:
                            type: "Int"
                            description: "The id of the Image"
                    resolve: "@marketReminder.graphql.image_resolver=('image_id', [args])"
                stock:
                    type: "Stock"
                    description: "A stock saved and linked to an user"
                    args:
                        id:
                            type: "Int"
                            description: "The id of the Stock"
                    resolve: "@resolver=('stock_id', [args])"
                products:
                    type: "Products"
                    description: "A product saved and linked to a stock"
                    args:
                        id:
                            type: "Int"
                            description: "The id of the product"
                    resolve: "@resolver=('products_id', [args])"
    
    

    As you can see, the resolve is called in the Image definition and he must return the image(s) as defined in the resolver, problem is, if I use the /graphiql endpoint and ask for something like this :

    {
      image(id: 1) {
        alt
      }
    }
    
    

    Here's the return :

    {
      "data": {
        "image": {
          "alt": null
        }
      }
    }
    

    The fixtures is loaded and the PHPStorm interface return data into the BDD so I guess the problem comes from the resolver or the bundle linking process between the requested resource and the endpoint return.

    I know that I can ask in the symfony-devs Slack but it seems that no one has use the bundle since he's allowed by Flex so I come here to have the "creator" vision for my problem, I know it's not really an issue and more a "configuration" or "classe definition" problem but it really block me and I don't know how to solve this problem.

    Plus, I've read the documentation for days and I find that the resolver part it's not pretty clear, the ResolverInterface is empty (who's strange for an interface ?) and there's not example in order to build a simple resolver, maybe this part can be completed ?

    Thanks again for the help and have a great day :).

    question 
    opened by Guikingone 17
  • Fix unbound webonyx/graphql-php constraint

    Fix unbound webonyx/graphql-php constraint

    | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Documented? | no | Fixed tickets | #1083 | License | MIT

    v0.15 ist not compatible with webonyx/graphql-php >=15

    opened by buffcode 0
  • Unbound Version Constraint webonyx/graphql-php:>=14.5 causes Compile Error

    Unbound Version Constraint webonyx/graphql-php:>=14.5 causes Compile Error

    | Q | A | ---------------- | ----- | Bug report? | yes | Feature request? | no | BC Break report? | somewhat | RFC? | no | Version/Branch | v0.14.3 && v0.15.1

    Error: Compile Error: Declaration of Overblog\DataLoader\Promise\Adapter\Webonyx\GraphQL\SyncPromiseAdapter::beforeWait(GraphQL\Executor\Promise\Promise $promise) must be compatible with GraphQL\Executor\Promise\Adapter\SyncPromiseAdapter::beforeWait(GraphQL\Executor\Promise\Promise $promise): void

    Webonyx release v15.0.0 on friday. There it tightens the function declaraion of SyncPromiseAdapter::beforeWait. dataloader-php isn't updated yet, which causes the compile error. But dataloader-php doesn't define the requirement to webonyx. Instead graphql-bundle does. But without the restriction to ^14.5 it allows to update to the new major version, which introducing breaking changes.

    Please update dataloader-php and/or correct the dependency requirement.

    As a workaround we have to include an additional version constraint to pin the indirect dependency.

    opened by possi 0
  • Update phpstan/phpstan requirement from 1.8.4 to 1.9.8

    Update phpstan/phpstan requirement from 1.8.4 to 1.9.8

    Updates the requirements on phpstan/phpstan to permit the latest version.

    Release notes

    Sourced from phpstan/phpstan's releases.

    1.9.8

    Improvements 🔧

    Bugfixes 🐛

    Commits
    • 45411d1 PHPStan 1.9.8
    • 503e820 Updated PHPStan to commit 503e82092684fc6089b94ff604746d3edd88cc78
    • 5503d87 Updated PHPStan to commit 5503d87ef390bffe6510d03c37d5a326d55413c2
    • 6276ce1 Updated PHPStan to commit 6276ce1c3e86e18d43989310dbd277e8ea9845f6
    • 35e4813 Updated PHPStan to commit 35e48134d498d820b4e1136279d486a24b8f5c82
    • 6dcbf38 Updated PHPStan to commit 6dcbf380102496979b04e9e87824cbed9f02fa26
    • 1070788 Updated PHPStan to commit 1070788017dcd03527882b454c671fe97d6c91b8
    • 1403c03 Updated PHPStan to commit 1403c03083fd919aa39d9602d3cf8ae4566fe9c8
    • 50cea22 Updated PHPStan to commit 50cea222a8627b73e90c3b837cc5369e636612ea
    • 012ee4a Fix typo
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Ignore Curl Request

    Ignore Curl Request

    | Q | A | ---------------- | ----- | Bug report? | no | Feature request? | no | BC Break report? | no | RFC? | no | Version/Branch | 0.15

    Hello, I have a case in which I need to send a GQL request inside the backend application. What I'm doing now is sending a Curl request in the backend which is kinda weird. I'm wondering if there is any way to resolve a GQL request without using Curl. like calling a method or something?

    opened by apair 0
  • Update doctrine/annotations requirement from ^1.13 to ^2.0

    Update doctrine/annotations requirement from ^1.13 to ^2.0

    Updates the requirements on doctrine/annotations to permit the latest version.

    Release notes

    Sourced from doctrine/annotations's releases.

    2.0.0

    Release Notes for 2.0.0

    Backwards incompatible release (major)

    2.0.0

    • Total issues resolved: 0
    • Total pull requests resolved: 6
    • Total contributors: 2

    BC-Break

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • [RFC] New configuration parsing model to manage everything with Symfony services

    [RFC] New configuration parsing model to manage everything with Symfony services

    | Q | A | ---------------- | ----- | Bug report? | no | Feature request? | yes | BC Break report? | no | RFC? | yes | Version/Branch | x.y.z

    I creates this issue to have single place to collect information about the new model of the parsing and caching of GraphQL types configs. As I know, the work was started by @Vincz and this was discussed and validated by @mcg-web at the time. But I cannot find comprehensive information about it to help with the finishing of the work. The code base only.

    So, below is the information collected so far. It would be nice when somebody provide me more information.

    1. The common API At the moment, the configuration parsers parse configuration and generate an array of config. This array of configuration is then validated with a Yaml configuration. The idea of the new way to do it, is to describe an API. This API describe a schema (all the classes under https://github.com/Vincz/GraphQLBundle/tree/master/src/Configuration). The various parsers are considered as ConfigurationProvider. We don't know how they work, we just want them to generate a Configuration. For example, the Metadata parser (https://github.com/Vincz/GraphQLBundle/tree/master/configuration/GraphQLConfigurationMetadataBundle) will use annotations and attributes to generate this Configuration object while the YAML parser (https://github.com/Vincz/GraphQLBundle/tree/master/configuration/GraphQLConfigurationYamlBundle) will read a YAML file to generate this configuration. So if we want to create a new type of Parser or whatever service that can generate a Configuration object we can. We do not duplicate anything. The parsers currently in https://github.com/Vincz/GraphQLBundle/tree/master/configuration will be distinct packages, and we install only the ones we want. An other advantage of doing it this way, is the ability to use various type simultaneously (like YAML + Annotations for example) and use type of others parsers. It is not possible with the current version.

    2. Use a service With the current version, the parsing is part of the cache warming process. It prevents us from using all Symfony services related stuff. The idea of the new configuration is to manage everything with Symfony services and to generate the Configuration object when it's needed (and cache it). You can check here https://github.com/Vincz/GraphQLBundle/blob/master/src/Resources/config/configuration.yaml for the declaration of the main Configuration object. It is generated by the ConfigurationProvider using all configured providers.

    You can check the latest version by @Vincz here : https://github.com/vincz/GraphQLBundle And my work it here: https://github.com/Aeliot-Tm/GraphQLBundle/tree/dynamic_config_parsing

    opened by Aeliot-Tm 6
Releases(v0.15.1)
  • v0.15.1(Jul 5, 2022)

    What's Changed

    • Stopped using container in compiler passes. by @ruudk in (https://github.com/overblog/GraphQLBundle/commit/7bec07f7a5873f2c8b77926ebbce97a33b3c06fb)
    • Fixed rootValue typing in ExecutorArgumentsEvent class. by @ktrzos in https://github.com/overblog/GraphQLBundle/pull/1029

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.15.0...v0.15.1

    Source code(tar.gz)
    Source code(zip)
  • v0.15.0(May 24, 2022)

    What's Changed

    • Support Symfony 6 and stable GraphQL PHP by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/1008

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.14.3...v0.15.0

    Source code(tar.gz)
    Source code(zip)
  • v0.14.3(Mar 11, 2022)

    What's Changed

    • Fix type generation for Composite symfony validator with explicit 'constraints' key by @bravik in https://github.com/overblog/GraphQLBundle/pull/992

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.14.2...v0.14.3

    Source code(tar.gz)
    Source code(zip)
  • v0.14.2(Feb 21, 2022)

    What's Changed

    • Add isTypeOf to TypeBuilder by @thedustin in https://github.com/overblog/GraphQLBundle/pull/985
    • Revert shorthand type compilation by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/989

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.14.1...v0.14.2

    Source code(tar.gz)
    Source code(zip)
  • v0.14.1(Dec 21, 2021)

    What's Changed

    • Fix validation constraints namespace conflicts in generated definition files by @bravik in https://github.com/overblog/GraphQLBundle/pull/968

    New Contributors

    • @bravik made their first contribution in https://github.com/overblog/GraphQLBundle/pull/968

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.14.0...v0.14.1

    Source code(tar.gz)
    Source code(zip)
  • v0.14.0(Dec 17, 2021)

    What's Changed

    • Update return typehint for SchemaBuilder by @kix in https://github.com/overblog/GraphQLBundle/pull/630
    • Change error message by @JoppeDC in https://github.com/overblog/GraphQLBundle/pull/645
    • Docs/validation by @murtukov in https://github.com/overblog/GraphQLBundle/pull/654
    • Update index.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/655
    • Added support for getters with no prefix on FieldResolver by @OwlyCode in https://github.com/overblog/GraphQLBundle/pull/657
    • Typofix by @kix in https://github.com/overblog/GraphQLBundle/pull/659
    • Update index.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/660
    • Update README.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/665
    • Update README.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/667
    • fix typo in relay paginator helper documentation by @mathroc in https://github.com/overblog/GraphQLBundle/pull/670
    • Make the encoder for the cursors of the edges of a connection customizable by @ste93cry in https://github.com/overblog/GraphQLBundle/pull/678
    • Update index.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/681
    • Reconfigure Travis-CI by @murtukov in https://github.com/overblog/GraphQLBundle/pull/685
    • ArgumentTransformer & validator component by @Vincz in https://github.com/overblog/GraphQLBundle/pull/642
    • Feature/generator by @murtukov in https://github.com/overblog/GraphQLBundle/pull/682
    • Update index.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/693
    • Profiler feature by @Vincz in https://github.com/overblog/GraphQLBundle/pull/696
    • Common project code upgrade by @murtukov in https://github.com/overblog/GraphQLBundle/pull/695
    • Fix docker for php 7.4 by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/699
    • Treat useStrictAccess option as true by default by @murtukov in https://github.com/overblog/GraphQLBundle/pull/700
    • Merge 0.13 by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/698
    • Allow cleaner access syntax in expressions by @murtukov in https://github.com/overblog/GraphQLBundle/pull/709
    • Simplify FQCN when using class_exists by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/711
    • Annotations refactoring by @Vincz in https://github.com/overblog/GraphQLBundle/pull/710
    • Add schema name as Executor argument & fix default schema by @Vincz in https://github.com/overblog/GraphQLBundle/pull/713
    • Add more native support for php constants in yaml files by @thedustin in https://github.com/overblog/GraphQLBundle/pull/719
    • Allow multiple target types by @Vincz in https://github.com/overblog/GraphQLBundle/pull/726
    • Fix the attribute name for AnnotationParser fieldBuilder error message by @bartv2 in https://github.com/overblog/GraphQLBundle/pull/732
    • Add type-hints in annotation classes by @murtukov in https://github.com/overblog/GraphQLBundle/pull/729
    • Allow to use non-empty constructor for input types by @olsavmic in https://github.com/overblog/GraphQLBundle/pull/656
    • Revert "Allow to use non-empty constructor for input types" by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/734
    • Make the docker image more usable by @bartv2 in https://github.com/overblog/GraphQLBundle/pull/737
    • Fix annotation on master by @Vincz in https://github.com/overblog/GraphQLBundle/pull/743
    • Fix parser on enum by @Vincz in https://github.com/overblog/GraphQLBundle/pull/746
    • Fix Input Field annotations handling by @bartv2 in https://github.com/overblog/GraphQLBundle/pull/735
    • baseExportPath already point to var dir by @bartv2 in https://github.com/overblog/GraphQLBundle/pull/747
    • Really ignore field and not create an empty InputType by @bartv2 in https://github.com/overblog/GraphQLBundle/pull/736
    • Add attributes targetTypeQuery and targetTypeMutation on @Provider by @Vincz in https://github.com/overblog/GraphQLBundle/pull/749
    • Update phpunit config-schema by @bartv2 in https://github.com/overblog/GraphQLBundle/pull/752
    • generate a SchemaCompiledEvent when Type files are generated by @mathroc in https://github.com/overblog/GraphQLBundle/pull/730
    • Add auto_discover.built_in configuration option by @astronom in https://github.com/overblog/GraphQLBundle/pull/756
    • Fixed a bug on validating fields when validation is cascade by @ktrzos in https://github.com/overblog/GraphQLBundle/pull/759
    • Update UPGRADE-0.11.md by @AdamTovatt in https://github.com/overblog/GraphQLBundle/pull/760
    • Update src/Generator/TypeBuilder.php by @koekaverna in https://github.com/overblog/GraphQLBundle/pull/761
    • Update links in README.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/764
    • Update index.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/765
    • Fix/phpstan by @murtukov in https://github.com/overblog/GraphQLBundle/pull/769
    • Refactor TypeBuilder and resolve some todos by @murtukov in https://github.com/overblog/GraphQLBundle/pull/770
    • Remove compiler pass by @murtukov in https://github.com/overblog/GraphQLBundle/pull/771
    • Optimize config processing by @murtukov in https://github.com/overblog/GraphQLBundle/pull/772
    • Update index.md by @murtukov in https://github.com/overblog/GraphQLBundle/pull/773
    • Fix Profiler bug by @murtukov in https://github.com/overblog/GraphQLBundle/pull/774
    • Update generated types by @murtukov in https://github.com/overblog/GraphQLBundle/pull/780
    • Made it possible for totalCount to be a promise by @rsolyanik in https://github.com/overblog/GraphQLBundle/pull/778
    • Refactor default field resolver by @murtukov in https://github.com/overblog/GraphQLBundle/pull/783
    • Fix annotation for non-nullable array of non-nullable values as query argument by @DmytryHo in https://github.com/overblog/GraphQLBundle/pull/806
    • Annotations refactoring & PHP 8 Attributes by @Vincz in https://github.com/overblog/GraphQLBundle/pull/801
    • Allow interfaces implement interfaces by @murtukov in https://github.com/overblog/GraphQLBundle/pull/813
    • Rename classes, tags and functions by @murtukov in https://github.com/overblog/GraphQLBundle/pull/786
    • Optimize validator by @murtukov in https://github.com/overblog/GraphQLBundle/pull/815
    • Update PHPStan version by @murtukov in https://github.com/overblog/GraphQLBundle/pull/816
    • Fix alias for mutation function by @murtukov in https://github.com/overblog/GraphQLBundle/pull/817
    • Fix repeatable scalar attribute by @Vincz in https://github.com/overblog/GraphQLBundle/pull/819
    • Improve GraphQLServices by making it a ServiceLocator by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/836
    • Keep original accessibility option for services tagged as resolver by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/837
    • Fix default value by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/839
    • Remove deprecations by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/840
    • Php cs fixer update by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/841
    • Refactor TypeGenerator by @murtukov in https://github.com/overblog/GraphQLBundle/pull/845
    • Fix CS by @murtukov in https://github.com/overblog/GraphQLBundle/pull/846
    • Remove XML type configuration support by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/852
    • Make ReactPromiseAdapter compatible with webonyx master by @ruudk in https://github.com/overblog/GraphQLBundle/pull/906
    • Check if experimental executor exists before trying to set it by @ruudk in https://github.com/overblog/GraphQLBundle/pull/907
    • Expose request in context by @ruudk in https://github.com/overblog/GraphQLBundle/pull/892
    • PHPUnit > Disable verbose / debug mode by @ruudk in https://github.com/overblog/GraphQLBundle/pull/910
    • Fix PHPStan error by @ruudk in https://github.com/overblog/GraphQLBundle/pull/911
    • Always compile types with AliasedInterface by @ruudk in https://github.com/overblog/GraphQLBundle/pull/890
    • PHPUnit > Disable verbose / debug mode by @ruudk in https://github.com/overblog/GraphQLBundle/pull/914
    • Drop Symfony 5.0, 5.1, 5.2 and start testing 5.3 by @ruudk in https://github.com/overblog/GraphQLBundle/pull/913
    • Drop Scrutinizer by @ruudk in https://github.com/overblog/GraphQLBundle/pull/918
    • Drop COMPOSER_ROOT_VERSION by @ruudk in https://github.com/overblog/GraphQLBundle/pull/920
    • Make 0.14 CI green again by @ruudk in https://github.com/overblog/GraphQLBundle/pull/919
    • Fix highest/lowest by @ruudk in https://github.com/overblog/GraphQLBundle/pull/923
    • Enable MonologBundle in functional tests by @ruudk in https://github.com/overblog/GraphQLBundle/pull/927
    • Require Symfony 4.4 or 5.3 by @ruudk in https://github.com/overblog/GraphQLBundle/pull/928
    • Add annotation reader cache and fix doctrine typeGuesser by @Damienbelingheri in https://github.com/overblog/GraphQLBundle/pull/867
    • Use php-coveralls.phar instead of global composer installation by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/934
    • Remove useless benchmarks by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/935
    • Add type on getContainerExtension for future compat by @GromNaN in https://github.com/overblog/GraphQLBundle/pull/931
    • Test symfony 5.4 by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/936
    • Use Flex to require specific Symfony versions by @ruudk in https://github.com/overblog/GraphQLBundle/pull/933
    • Replace deprecated NamedArgumentConstructorAnnotation with @NamedArgumentConstructor + Address one PHP 8.1 deprecation by @ruudk in https://github.com/overblog/GraphQLBundle/pull/941
    • Fix a bunch of deprecations by @ruudk in https://github.com/overblog/GraphQLBundle/pull/942
    • Test on PHP 8.1 by @ruudk in https://github.com/overblog/GraphQLBundle/pull/938
    • Fix deprecations in 0.14 by @ruudk in https://github.com/overblog/GraphQLBundle/pull/952
    • Allow all psr/log by @ruudk in https://github.com/overblog/GraphQLBundle/pull/953

    New Contributors

    • @kix made their first contribution in https://github.com/overblog/GraphQLBundle/pull/630
    • @JoppeDC made their first contribution in https://github.com/overblog/GraphQLBundle/pull/645
    • @mathroc made their first contribution in https://github.com/overblog/GraphQLBundle/pull/670
    • @thedustin made their first contribution in https://github.com/overblog/GraphQLBundle/pull/719
    • @bartv2 made their first contribution in https://github.com/overblog/GraphQLBundle/pull/732
    • @astronom made their first contribution in https://github.com/overblog/GraphQLBundle/pull/756
    • @ktrzos made their first contribution in https://github.com/overblog/GraphQLBundle/pull/759
    • @AdamTovatt made their first contribution in https://github.com/overblog/GraphQLBundle/pull/760
    • @koekaverna made their first contribution in https://github.com/overblog/GraphQLBundle/pull/761
    • @rsolyanik made their first contribution in https://github.com/overblog/GraphQLBundle/pull/778
    • @DmytryHo made their first contribution in https://github.com/overblog/GraphQLBundle/pull/806
    • @Damienbelingheri made their first contribution in https://github.com/overblog/GraphQLBundle/pull/867
    • @GromNaN made their first contribution in https://github.com/overblog/GraphQLBundle/pull/931

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.13.7...v0.14.0

    Source code(tar.gz)
    Source code(zip)
  • v0.13.7(Dec 6, 2021)

    What's Changed

    • Forward compatibility with symfony 6 at Parser by @edefimov in https://github.com/overblog/GraphQLBundle/pull/823
    • Fix uksort() callback returning bool deprecation by @BenMorel in https://github.com/overblog/GraphQLBundle/pull/865
    • Fix associative array syntax for arguments expr sample by @ogizanagi in https://github.com/overblog/GraphQLBundle/pull/871
    • Bump ci ubuntu version to fix setup-php build by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/878
    • 0.12 by @Vincz in https://github.com/overblog/GraphQLBundle/pull/880
    • Fix ci builds by @mcg-web in https://github.com/overblog/GraphQLBundle/pull/879
    • Fix DebugCommand dependency injection by @jdecool in https://github.com/overblog/GraphQLBundle/pull/905

    New Contributors

    • @ogizanagi made their first contribution in https://github.com/overblog/GraphQLBundle/pull/871
    • @jdecool made their first contribution in https://github.com/overblog/GraphQLBundle/pull/905

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.13.6...v0.13.7

    Source code(tar.gz)
    Source code(zip)
  • v0.12.12(Dec 6, 2021)

    What's Changed

    • Fix uksort() callback returning bool deprecation by @BenMorel in https://github.com/overblog/GraphQLBundle/pull/865
    • Fix associative array syntax for arguments expr sample by @ogizanagi in https://github.com/overblog/GraphQLBundle/pull/871
    • 0.12 by @Vincz in https://github.com/overblog/GraphQLBundle/pull/880

    New Contributors

    • @ogizanagi made their first contribution in https://github.com/overblog/GraphQLBundle/pull/871

    Full Changelog: https://github.com/overblog/GraphQLBundle/compare/v0.12.11...v0.12.12

    Source code(tar.gz)
    Source code(zip)
  • v0.13.6(Apr 28, 2021)

    [v0.13.6] - 2021-04-28

    Fixed

    • Fix bug in the Argument offsetExists method (#832) by @murtukov
    • Fix error for non-nullable array of non-nullable elements annotation by @DmytryHo (#807)
    • Make sure that internal_error_message is used during ErrorHandler initialization by @ferrastas (#803)
    Source code(tar.gz)
    Source code(zip)
  • v0.12.11(Apr 28, 2021)

  • v0.13.5(Dec 28, 2020)

    [v0.13.5] - 2020-12-28

    Fixed

    • Add private property annotations from inherited classes by @IceShack
    • Remove symfony 5.1 deprecation by @murtukov (#715)
    • Re-add support for isser methods by @Kocal (#720)
    • Pass the full query to the executor by @edhgoose (#790)
    Source code(tar.gz)
    Source code(zip)
  • v0.12.10(Dec 28, 2020)

  • v0.11.20(Dec 28, 2020)

  • v0.13.4(Aug 27, 2020)

    [v0.13.4] - 2020-08-27

    Fixed

    • Fix generation of last comma in arrays by @murtukov in #745
    • Fix annotations by @Vincz in #741
    • Fix resolver field with same property/method name by @mcg-web in #727
    • re-add support for isser methods by @Kocal in #720
    • Fix annotations default arg value always a string by @murtukov in #723
    • Fix annotations inherit private properties by @IceShack from original #675 fix proposed for 0.13
    Source code(tar.gz)
    Source code(zip)
  • v0.12.9(Aug 27, 2020)

    [v0.12.9] - 2020-08-27

    Fixed

    • Fix annotations by @Vincz in #741
    • Fix annotations default arg value always a string by @murtukov in #723
    • Fix annotations inherit private properties by @IceShack from original #675 fix proposed for 0.13
    Source code(tar.gz)
    Source code(zip)
  • v0.13.3(Jul 8, 2020)

    [v0.13.3] - 2020-07-08

    Fixed

    • Fix #588 by changing setup of expression language functions by @sgehrig in #697
    • Fix ValidationNode.php for older php version by @murtukov in #687
    • Fix shorthand field definitions feature by @murtukov in #680
    Source code(tar.gz)
    Source code(zip)
  • v0.12.8(Jul 8, 2020)

  • v0.11.19(Jul 8, 2020)

  • v0.13.2(Apr 3, 2020)

    [v0.13.2] - 2020-04-03

    Fixed

    • Use the exception key in the context of the logger by @ste93cry in #663
    • Require symfony/property-access (missing deps) by @ruudk in #641
    Source code(tar.gz)
    Source code(zip)
  • v0.12.7(Apr 3, 2020)

  • v0.13.1(Jan 15, 2020)

    [v0.13.1] - 2020-01-15

    Fixed

    • Make Symfony security core component optional by @mcg-web in #633

    Enhancement

    • Grant permission only when access returns true by @ruudk in #636
    Source code(tar.gz)
    Source code(zip)
  • v0.12.6(Jan 15, 2020)

    [v0.12.6] - 2020-01-15

    Fixed

    • Remove php7.4 deprecation messages by @mcg-web in #627

    Enhancement

    • Grant permission only when access returns true by @ruudk in #636
    Source code(tar.gz)
    Source code(zip)
  • v0.11.18(Jan 15, 2020)

  • v0.13.0(Jan 8, 2020)

  • v0.13.0-BETA1(Dec 7, 2019)

  • v0.12.5(Nov 28, 2019)

  • v0.12.4(Nov 28, 2019)

    [v0.12.4] - 2019-11-28

    Support

    • Add support for Symfony 5 by @mcg-web in #621

    Fixed

    • Fix parsing of the description of the enum values in a GraphQL schema file by @ste93cry in #613
    • Convert header to string to fix test for Symfony 4.3.4 by @mcg-web
    • Use specific version of phpcs by @mcg-web in #611
    • Fix interface merging by @ooflorent and @mcg-web in #567
    Source code(tar.gz)
    Source code(zip)
  • v0.11.17(Nov 28, 2019)

  • v0.11.16(Nov 13, 2019)

    [v0.11.16] - 2019-11-13

    Fixed

    • Fix parsing of the description of the enum values in a GraphQL schema file by @ste93cry in #613
    • Convert header to string to fix test for Symfony 4.3.4 by @mcg-web
    • Use specific version of phpcs by @mcg-web in #611
    Source code(tar.gz)
    Source code(zip)
  • v0.12.3(Sep 19, 2019)

Owner
Webedia - Overblog
Top European Blogging Platform
Webedia - Overblog
Monorepo of the PoP project, including: a server-side component model in PHP, a GraphQL server, a GraphQL API plugin for WordPress, and a website builder

PoP PoP is a monorepo containing several projects. The GraphQL API for WordPress plugin GraphQL API for WordPress is a forward-looking and powerful Gr

Leonardo Losoviz 265 Jan 7, 2023
Pure PHP implementation of GraphQL Server – Symfony Bundle

Symfony GraphQl Bundle This is a bundle based on the pure PHP GraphQL Server implementation This bundle provides you with: Full compatibility with the

null 283 Dec 15, 2022
Syntax to query GraphQL through URL params, which grants a GraphQL API the capability to be cached on the server.

Field Query Syntax to query GraphQL through URL params, which grants a GraphQL API the capability to be cached on the server. Install Via Composer com

PoP 4 Jan 7, 2022
GraphQL Bundle for Symfony 2.

Symfony 2 GraphQl Bundle Use Facebook GraphQL with Symfony 2. This library port laravel-graphql. It is based on the PHP implementation here. Installat

Sergey Varibrus 35 Nov 17, 2022
A Symfony bundle that provides #StandWithUkraine banner and has some built-in features to block access to your resource for Russian-speaking users.

StandWithUkraineBundle На русском? Смотри README.ru.md This bundle provides a built-in StandWithUkraine banner for your Symfony application and has so

Victor Bocharsky 10 Nov 12, 2022
Airbrake.io & Errbit integration for Symfony 3/4/5. This bundle plugs the Airbrake API client into Symfony project

AmiAirbrakeBundle Airbrake.io & Errbit integration for Symfony 3/4/5. This bundle plugs the Airbrake API client into Symfony project. Prerequisites Th

Anton Minin 8 May 6, 2022
Symfony bundle integrating server-sent native notifications

Symfony UX Notify Symfony UX Notify is a Symfony bundle integrating server-sent native notifications in Symfony applications using Mercure. It is part

Symfony 6 Dec 15, 2022
Test your PHP GraphQL server in style, with Pest!

Pest GraphQL Plugin Test your GraphQL API in style, with Pest! Installation Simply install through Composer! composer require --dev miniaturebase/pest

Minibase 14 Aug 9, 2022
A Statamic Pro addon that provides alternative GraphQL queries for collections, entries and global sets.

Statamic Enhanced GraphQL A Statamic CMS GraphQL Addon that provides alternative GraphQL queries for collections, entries and global sets. ⚠️ This is

Grischa Erbe 2 Dec 7, 2021
Laravel api tool kit is a set of tools that will help you to build a fast and well-organized API using laravel best practices.

Laravel API tool kit and best API practices Laravel api tool kit is a set of tools that will help you to build a fast and well-organized API using lar

Ahmed Esa 106 Nov 22, 2022
Provides tools for building modules that integrate Nosto into your e-commerce platform

php-sdk Provides tools for building modules that integrate Nosto into your e-commerce platform. Requirements The Nosto PHP SDK requires at least PHP v

Nosto 5 Dec 21, 2021
EXPERIMENTAL plugin extending WPGraphQL to support querying (Gutenberg) Blocks as data, using Server Side Block registries to map Blocks to the GraphQL Schema.

WPGraphQL Block Editor This is an experimental plugin to work toward compatiblity between the WordPress Gutenberg Block Editor and WPGraphQL, based on

WPGraphQL 29 Nov 18, 2022
GraPHPinator ⚡ 🌐 ⚡ Easy-to-use & Fast GraphQL server implementation for PHP

Easy-to-use & Fast GraphQL server implementation for modern PHP. Includes features from latest draft, middleware directives and modules with extra functionality.

Infinityloop.dev 34 Dec 14, 2022
The server component of API Platform: hypermedia and GraphQL APIs in minutes

API Platform Core API Platform Core is an easy to use and powerful system to create hypermedia-driven REST and GraphQL APIs. It is a component of the

API Platform 2.2k Dec 27, 2022
DataTables bundle for Symfony

Symfony DataTables Bundle This bundle provides convenient integration of the popular DataTables jQuery library for realtime Ajax tables in your Symfon

Omines Internetbureau 199 Jan 3, 2023
An Unleash bundle for Symfony applications to provide an easy way to use feature flags

Unleash Bundle An Unleash bundle for Symfony applications. This provide an easy way to implement feature flags using Gitlab Feature Flags Feature. Ins

Stogon 7 Oct 20, 2022
Symfony Health Check Bundle Monitoring Project Status

Symfony Health Check Bundle Version Build Status Code Coverage master develop Installation Step 1: Download the Bundle Open a command console, enter y

MacPaw Inc. 27 Jul 7, 2022
A bundle providing routes and glue code between Symfony and a WOPI connector.

WOPI Bundle A Symfony bundle to facilitate the implementation of the WOPI endpoints and protocol. Description The Web Application Open Platform Interf

Champs-Libres 5 Aug 20, 2022
Mediator - CQRS Symfony bundle. Auto Command/Query routing to corresponding handlers.

Installation $ composer require whsv26/mediator Bundle configuration // config/packages/mediator.php return static function (MediatorConfig $config)

Alexander Sv. 6 Aug 31, 2022