From a05758a72f982e669f587ad2f7256723d7413568 Mon Sep 17 00:00:00 2001 From: Tom H Anderson Date: Sat, 20 Dec 2025 18:14:29 -0700 Subject: [PATCH 1/3] Updated workflows to 8.4, 8.5 --- .github/workflows/coding-standards.yml | 2 +- .github/workflows/continuous-integration.yml | 2 +- .github/workflows/static-analysis.yml | 2 +- test/Feature/Type/JsonTest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/coding-standards.yml b/.github/workflows/coding-standards.yml index d02e122..6688694 100644 --- a/.github/workflows/coding-standards.yml +++ b/.github/workflows/coding-standards.yml @@ -13,7 +13,7 @@ on: inputs: php-version: description: "The PHP version to use when running the job" - default: "8.3" + default: "8.4" required: false type: "string" composer-root-version: diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 429220f..ded4382 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -19,8 +19,8 @@ jobs: fail-fast: false matrix: php-version: - - "8.3" - "8.4" + - "8.5" dependencies: - "highest" - "lowest" diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 9c35ab8..2bafc60 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -18,7 +18,7 @@ jobs: steps: - uses: shivammathur/setup-php@v2 with: - php-version: '8.3' + php-version: '8.4' - uses: actions/checkout@v2 diff --git a/test/Feature/Type/JsonTest.php b/test/Feature/Type/JsonTest.php index 8e704ab..6f0f79d 100644 --- a/test/Feature/Type/JsonTest.php +++ b/test/Feature/Type/JsonTest.php @@ -60,7 +60,7 @@ public function testSerializeFails(): void $this->expectException(Error::class); $jsonType = new Json(); - $jsonType->serialize(["name" => "\xB1\x31"]); + $jsonType->serialize(['name' => "\xB1\x31"]); } public function testContains(): void From 94fbe379156f69d60e40a35a978490666f948cd7 Mon Sep 17 00:00:00 2001 From: Tom H Anderson Date: Sat, 20 Dec 2025 18:15:24 -0700 Subject: [PATCH 2/3] Set all dependencies to current --- composer.json | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/composer.json b/composer.json index e14ff97..cc95884 100644 --- a/composer.json +++ b/composer.json @@ -10,21 +10,22 @@ } ], "require": { - "php": "^8.3", - "doctrine/orm": "^3.0", - "doctrine/doctrine-laminas-hydrator": "^3.2", - "webonyx/graphql-php": "^v15.0", + "php": "^8.4", + "doctrine/orm": "^3.6", + "doctrine/doctrine-laminas-hydrator": "^3.7", + "webonyx/graphql-php": "^v15.29", "psr/container": "^2.0", - "league/event": "^3.0" + "league/event": "^3.0", + "symfony/var-exporter": "^6.4||^7" }, "require-dev": { "doctrine/coding-standard": "^14.0", - "doctrine/dbal": "^3.1 || ^4.0", + "doctrine/dbal": "^4.0", "phpunit/phpunit": "^12.0", - "vimeo/psalm": "^6.13", - "symfony/cache": "^5.3||^6.2", + "vimeo/psalm": "^6.14", + "symfony/cache": "^7.0", "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpstan/phpstan": "^1.12 || ^2.0" + "phpstan/phpstan": "^2.1" }, "suggest": { "ramsey/uuid-doctrine": "Support for an UUID Doctrine type" From 0d0d9b033027f7c7849380f24801c3ed70da2d04 Mon Sep 17 00:00:00 2001 From: Tom H Anderson Date: Sat, 20 Dec 2025 18:17:44 -0700 Subject: [PATCH 3/3] Now using GhostObjects in container --- src/Services.php | 123 +++++++++++++++++++++++++++++------------------ 1 file changed, 75 insertions(+), 48 deletions(-) diff --git a/src/Services.php b/src/Services.php index 1480a39..2ff89ba 100644 --- a/src/Services.php +++ b/src/Services.php @@ -9,6 +9,7 @@ use ArrayObject; use Doctrine\ORM\EntityManager; use League\Event\EventDispatcher; +use ReflectionClass; /** * This trait is used to remove complexity from the Driver class. @@ -41,7 +42,12 @@ static function () use ($config) { ->set(Type\TypeContainer::class, static fn () => new Type\TypeContainer()) ->set( Type\Entity\EntityTypeContainer::class, - static fn (Container $container) => new Type\Entity\EntityTypeContainer($container), + static function (Container $container): Type\Entity\EntityTypeContainer { + return (new ReflectionClass(Type\Entity\EntityTypeContainer::class)) + ->newLazyGhost(static function (Type\Entity\EntityTypeContainer $object) use ($container): void { + $object->__construct($container); + }); + }, ) ->set( 'metadata', @@ -57,77 +63,98 @@ static function (Container $container) use ($metadata) { ) ->set( Metadata\GlobalEnable::class, - static function (Container $container) { - return new Metadata\GlobalEnable( - $container->get(EntityManager::class), - $container->get(Config::class), - $container->get(EventDispatcher::class), - ); + static function (Container $container): Metadata\GlobalEnable { + return (new ReflectionClass(Metadata\GlobalEnable::class)) + ->newLazyGhost(static function (Metadata\GlobalEnable $object) use ($container): void { + $object->__construct( + $container->get(EntityManager::class), + $container->get(Config::class), + $container->get(EventDispatcher::class), + ); + }); }, ) ->set( Resolve\FieldResolver::class, - static function (Container $container) { - return new Resolve\FieldResolver( - $container->get(Config::class), - $container->get(Type\Entity\EntityTypeContainer::class), - ); + static function (Container $container): Resolve\FieldResolver { + return (new ReflectionClass(Resolve\FieldResolver::class)) + ->newLazyGhost(static function (Resolve\FieldResolver $object) use ($container): void { + $object->__construct( + $container->get(Config::class), + $container->get(Type\Entity\EntityTypeContainer::class), + ); + }); }, ) ->set( Resolve\ResolveCollectionFactory::class, - static function (Container $container) { - return new Resolve\ResolveCollectionFactory( - $container->get(EntityManager::class), - $container->get(Config::class), - $container->get(Resolve\FieldResolver::class), - $container->get(Type\TypeContainer::class), - $container->get(EntityTypeContainer::class), - $container->get(EventDispatcher::class), - $container->get('metadata'), - ); + static function (Container $container): Resolve\ResolveCollectionFactory { + return (new ReflectionClass(Resolve\ResolveCollectionFactory::class)) + ->newLazyGhost(static function (Resolve\ResolveCollectionFactory $object) use ($container): void { + $object->__construct( + $container->get(EntityManager::class), + $container->get(Config::class), + $container->get(Resolve\FieldResolver::class), + $container->get(Type\TypeContainer::class), + $container->get(EntityTypeContainer::class), + $container->get(EventDispatcher::class), + $container->get('metadata'), + ); + }); }, ) ->set( Resolve\ResolveEntityFactory::class, - static function (Container $container) { - return new Resolve\ResolveEntityFactory( - $container->get(Config::class), - $container->get(EntityManager::class), - $container->get(EventDispatcher::class), - $container->get('metadata'), - ); + static function (Container $container): Resolve\ResolveEntityFactory { + return (new ReflectionClass(Resolve\ResolveEntityFactory::class)) + ->newLazyGhost(static function (Resolve\ResolveEntityFactory $object) use ($container): void { + $object->__construct( + $container->get(Config::class), + $container->get(EntityManager::class), + $container->get(EventDispatcher::class), + $container->get('metadata'), + ); + }); }, ) ->set( Filter\FilterFactory::class, - static function (Container $container) { - return new Filter\FilterFactory( - $container->get(Config::class), - $container->get(EntityManager::class), - $container->get(Type\TypeContainer::class), - $container->get(EventDispatcher::class), - ); + static function (Container $container): Filter\FilterFactory { + return (new ReflectionClass(Filter\FilterFactory::class)) + ->newLazyGhost(static function (Filter\FilterFactory $object) use ($container): void { + $object->__construct( + $container->get(Config::class), + $container->get(EntityManager::class), + $container->get(Type\TypeContainer::class), + $container->get(EventDispatcher::class), + ); + }); }, ) ->set( Hydrator\HydratorContainer::class, - static function (Container $container) { - return new Hydrator\HydratorContainer( - $container->get(EntityManager::class), - $container->get(Type\Entity\EntityTypeContainer::class), - ); + static function (Container $container): Hydrator\HydratorContainer { + return (new ReflectionClass(Hydrator\HydratorContainer::class)) + ->newLazyGhost(static function (Hydrator\HydratorContainer $object) use ($container): void { + $object->__construct( + $container->get(EntityManager::class), + $container->get(Type\Entity\EntityTypeContainer::class), + ); + }); }, ) ->set( Input\InputFactory::class, - static function (Container $container) { - return new Input\InputFactory( - $container->get(Config::class), - $container->get(EntityManager::class), - $container->get(Type\Entity\EntityTypeContainer::class), - $container->get(Type\TypeContainer::class), - ); + static function (Container $container): Input\InputFactory { + return (new ReflectionClass(Input\InputFactory::class)) + ->newLazyGhost(static function (Input\InputFactory $object) use ($container): void { + $object->__construct( + $container->get(Config::class), + $container->get(EntityManager::class), + $container->get(Type\Entity\EntityTypeContainer::class), + $container->get(Type\TypeContainer::class), + ); + }); }, ); }