From a8a7cbcb2817d5afe6e4e4c4747518c2b8fdb125 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Tue, 12 Aug 2025 16:57:36 -0600 Subject: [PATCH 1/5] Docker setup --- .docker/conf/xdebug.ini | 8 ++++++++ Dockerfile | 28 ++++++++++++++++++++++++++++ docker-compose.yaml | 15 +++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 .docker/conf/xdebug.ini create mode 100644 Dockerfile create mode 100644 docker-compose.yaml diff --git a/.docker/conf/xdebug.ini b/.docker/conf/xdebug.ini new file mode 100644 index 0000000..ff5e70d --- /dev/null +++ b/.docker/conf/xdebug.ini @@ -0,0 +1,8 @@ +[xdebug] +xdebug.mode=develop,debug +xdebug.idekey=docker +xdebug.start_with_request=yes +xdebug.log=/dev/stdout +xdebug.log_level=0 +xdebug.client_port=9003 +xdebug.client_host=host.docker.internal diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..14b611e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# Use official PHP 8.1 CLI image as base +FROM php:8.2-apache + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + git \ + libzip-dev \ + && docker-php-ext-install zip \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +# Install Xdebug +RUN pecl install xdebug && docker-php-ext-enable xdebug + +# Set working directory +WORKDIR /var/www/html/laravel-doctrine-extensions + +# Install Laravel dependencies +RUN composer install --no-interaction --optimize-autoloader --dev || true + +# Expose port for Laravel development server +EXPOSE 8000 + +# Start Laravel development server +CMD ["apache2-foreground"] diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..9da4f63 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,15 @@ +services: + php: + build: + context: . + dockerfile: Dockerfile + container_name: laravel-doctrine-extensions + volumes: + - ./:/var/www/html/laravel-doctrine-extensions + - ./.docker/conf/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini + ports: + - "8000:80" + environment: + - XDEBUG_MODE=debug + - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 + - PHP_IDE_CONFIG=serverName=laravel-doctrine-extensions From ecf52e808eff1fc2a34aa859a36cfd71efe75b85 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Tue, 12 Aug 2025 17:06:53 -0600 Subject: [PATCH 2/5] Update GedmoExtensionsServiceProvider --- src/GedmoExtensionsServiceProvider.php | 71 ++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/src/GedmoExtensionsServiceProvider.php b/src/GedmoExtensionsServiceProvider.php index bc259aa..283a08e 100644 --- a/src/GedmoExtensionsServiceProvider.php +++ b/src/GedmoExtensionsServiceProvider.php @@ -4,8 +4,16 @@ namespace LaravelDoctrine\Extensions; +use Doctrine\Common\Annotations\AnnotationRegistry; +use Doctrine\ORM\Mapping\Driver\AnnotationDriver; +use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; use Gedmo\DoctrineExtensions; +use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Support\ServiceProvider; +use LaravelDoctrine\Fluent\Extensions\GedmoExtensions; +use LaravelDoctrine\Fluent\FluentDriver; + +use function method_exists; class GedmoExtensionsServiceProvider extends ServiceProvider { @@ -20,16 +28,69 @@ public function register(): void foreach ($registry->getManagers() as $manager) { $chain = $manager->getConfiguration()->getMetadataDriverImpl(); - if ($this->needsAllMappings()) { - DoctrineExtensions::registerMappingIntoDriverChainORM($chain); - } else { - DoctrineExtensions::registerAbstractMappingIntoDriverChainORM($chain); + if ($this->hasAnnotationReader($chain)) { + $this->registerGedmoForAnnotations($chain); + } + + if (! $this->hasFluentDriver($chain)) { + continue; } + + $this->registerGedmoForFluent($chain); } }); } - private function needsAllMappings(): mixed + private function hasAnnotationReader(MappingDriverChain $driver): bool + { + foreach ($driver->getDrivers() as $driver) { + if ($driver instanceof AnnotationDriver) { + return true; + } + } + + return false; + } + + private function hasFluentDriver(MappingDriverChain $driver): bool + { + foreach ($driver->getDrivers() as $driver) { + if ($driver instanceof FluentDriver) { + return true; + } + } + + return false; + } + + /** @throws BindingResolutionException */ + private function registerGedmoForAnnotations(MappingDriverChain $chain): void + { + if ($this->needsAllMappings()) { + DoctrineExtensions::registerMappingIntoDriverChainORM($chain); + } else { + DoctrineExtensions::registerAbstractMappingIntoDriverChainORM($chain); + } + + if (! method_exists(AnnotationRegistry::class, 'registerUniqueLoader')) { + return; + } + + AnnotationRegistry::registerUniqueLoader('class_exists'); + } + + /** @throws BindingResolutionException */ + private function registerGedmoForFluent(MappingDriverChain $chain): void + { + if ($this->needsAllMappings()) { + GedmoExtensions::registerAll($chain); + } else { + GedmoExtensions::registerAbstract($chain); + } + } + + /** @throws BindingResolutionException */ + private function needsAllMappings(): bool { return $this->app->make('config')->get('doctrine.gedmo.all_mappings', false) === true; } From 061e16f2d6ba1f158bd41d392a6fda0d1fd6aec2 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Tue, 12 Aug 2025 17:14:33 -0600 Subject: [PATCH 3/5] debugging --- src/GedmoExtensionsServiceProvider.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/GedmoExtensionsServiceProvider.php b/src/GedmoExtensionsServiceProvider.php index 283a08e..77b4cd1 100644 --- a/src/GedmoExtensionsServiceProvider.php +++ b/src/GedmoExtensionsServiceProvider.php @@ -22,6 +22,7 @@ class GedmoExtensionsServiceProvider extends ServiceProvider */ public function register(): void { + echo "\nregister\n"; $this->app['events']->listen('doctrine.extensions.booting', function (): void { $registry = $this->app->make('registry'); @@ -43,6 +44,7 @@ public function register(): void private function hasAnnotationReader(MappingDriverChain $driver): bool { + echo "\nhasAnnotationReader\n"; foreach ($driver->getDrivers() as $driver) { if ($driver instanceof AnnotationDriver) { return true; @@ -54,6 +56,7 @@ private function hasAnnotationReader(MappingDriverChain $driver): bool private function hasFluentDriver(MappingDriverChain $driver): bool { + echo "\nhasFluentDriver\n"; foreach ($driver->getDrivers() as $driver) { if ($driver instanceof FluentDriver) { return true; @@ -66,6 +69,7 @@ private function hasFluentDriver(MappingDriverChain $driver): bool /** @throws BindingResolutionException */ private function registerGedmoForAnnotations(MappingDriverChain $chain): void { + echo "\nregisterGedmoForAnnotations\n"; if ($this->needsAllMappings()) { DoctrineExtensions::registerMappingIntoDriverChainORM($chain); } else { @@ -82,6 +86,7 @@ private function registerGedmoForAnnotations(MappingDriverChain $chain): void /** @throws BindingResolutionException */ private function registerGedmoForFluent(MappingDriverChain $chain): void { + echo "\nregisterGedmoForFluent\n"; if ($this->needsAllMappings()) { GedmoExtensions::registerAll($chain); } else { @@ -92,6 +97,7 @@ private function registerGedmoForFluent(MappingDriverChain $chain): void /** @throws BindingResolutionException */ private function needsAllMappings(): bool { + echo "\nneedsAllMappings\n"; return $this->app->make('config')->get('doctrine.gedmo.all_mappings', false) === true; } } From be643b2ff68ea7c36c53f19e3b591af78d0008ad Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Tue, 12 Aug 2025 17:21:03 -0600 Subject: [PATCH 4/5] Cut the fat --- src/GedmoExtensionsServiceProvider.php | 42 -------------------------- 1 file changed, 42 deletions(-) diff --git a/src/GedmoExtensionsServiceProvider.php b/src/GedmoExtensionsServiceProvider.php index 77b4cd1..571073c 100644 --- a/src/GedmoExtensionsServiceProvider.php +++ b/src/GedmoExtensionsServiceProvider.php @@ -4,17 +4,12 @@ namespace LaravelDoctrine\Extensions; -use Doctrine\Common\Annotations\AnnotationRegistry; -use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\Persistence\Mapping\Driver\MappingDriverChain; -use Gedmo\DoctrineExtensions; use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Support\ServiceProvider; use LaravelDoctrine\Fluent\Extensions\GedmoExtensions; use LaravelDoctrine\Fluent\FluentDriver; -use function method_exists; - class GedmoExtensionsServiceProvider extends ServiceProvider { /** @@ -22,17 +17,12 @@ class GedmoExtensionsServiceProvider extends ServiceProvider */ public function register(): void { - echo "\nregister\n"; $this->app['events']->listen('doctrine.extensions.booting', function (): void { $registry = $this->app->make('registry'); foreach ($registry->getManagers() as $manager) { $chain = $manager->getConfiguration()->getMetadataDriverImpl(); - if ($this->hasAnnotationReader($chain)) { - $this->registerGedmoForAnnotations($chain); - } - if (! $this->hasFluentDriver($chain)) { continue; } @@ -42,21 +32,8 @@ public function register(): void }); } - private function hasAnnotationReader(MappingDriverChain $driver): bool - { - echo "\nhasAnnotationReader\n"; - foreach ($driver->getDrivers() as $driver) { - if ($driver instanceof AnnotationDriver) { - return true; - } - } - - return false; - } - private function hasFluentDriver(MappingDriverChain $driver): bool { - echo "\nhasFluentDriver\n"; foreach ($driver->getDrivers() as $driver) { if ($driver instanceof FluentDriver) { return true; @@ -66,27 +43,9 @@ private function hasFluentDriver(MappingDriverChain $driver): bool return false; } - /** @throws BindingResolutionException */ - private function registerGedmoForAnnotations(MappingDriverChain $chain): void - { - echo "\nregisterGedmoForAnnotations\n"; - if ($this->needsAllMappings()) { - DoctrineExtensions::registerMappingIntoDriverChainORM($chain); - } else { - DoctrineExtensions::registerAbstractMappingIntoDriverChainORM($chain); - } - - if (! method_exists(AnnotationRegistry::class, 'registerUniqueLoader')) { - return; - } - - AnnotationRegistry::registerUniqueLoader('class_exists'); - } - /** @throws BindingResolutionException */ private function registerGedmoForFluent(MappingDriverChain $chain): void { - echo "\nregisterGedmoForFluent\n"; if ($this->needsAllMappings()) { GedmoExtensions::registerAll($chain); } else { @@ -97,7 +56,6 @@ private function registerGedmoForFluent(MappingDriverChain $chain): void /** @throws BindingResolutionException */ private function needsAllMappings(): bool { - echo "\nneedsAllMappings\n"; return $this->app->make('config')->get('doctrine.gedmo.all_mappings', false) === true; } } From 7c7f214da4f3d912b3c5a6fd6303450119bfdb55 Mon Sep 17 00:00:00 2001 From: Mason Eyre Date: Thu, 28 Aug 2025 13:43:41 -0600 Subject: [PATCH 5/5] Get branch ready for upstream PR --- .docker/conf/xdebug.ini | 8 -------- Dockerfile | 28 ---------------------------- docker-compose.yaml | 15 --------------- 3 files changed, 51 deletions(-) delete mode 100644 .docker/conf/xdebug.ini delete mode 100644 Dockerfile delete mode 100644 docker-compose.yaml diff --git a/.docker/conf/xdebug.ini b/.docker/conf/xdebug.ini deleted file mode 100644 index ff5e70d..0000000 --- a/.docker/conf/xdebug.ini +++ /dev/null @@ -1,8 +0,0 @@ -[xdebug] -xdebug.mode=develop,debug -xdebug.idekey=docker -xdebug.start_with_request=yes -xdebug.log=/dev/stdout -xdebug.log_level=0 -xdebug.client_port=9003 -xdebug.client_host=host.docker.internal diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 14b611e..0000000 --- a/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# Use official PHP 8.1 CLI image as base -FROM php:8.2-apache - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - git \ - libzip-dev \ - && docker-php-ext-install zip \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Install Composer -RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer - -# Install Xdebug -RUN pecl install xdebug && docker-php-ext-enable xdebug - -# Set working directory -WORKDIR /var/www/html/laravel-doctrine-extensions - -# Install Laravel dependencies -RUN composer install --no-interaction --optimize-autoloader --dev || true - -# Expose port for Laravel development server -EXPOSE 8000 - -# Start Laravel development server -CMD ["apache2-foreground"] diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index 9da4f63..0000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,15 +0,0 @@ -services: - php: - build: - context: . - dockerfile: Dockerfile - container_name: laravel-doctrine-extensions - volumes: - - ./:/var/www/html/laravel-doctrine-extensions - - ./.docker/conf/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini - ports: - - "8000:80" - environment: - - XDEBUG_MODE=debug - - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003 - - PHP_IDE_CONFIG=serverName=laravel-doctrine-extensions