From 191f28a2eb9aa13972c23703bf3e2e9a7059caef Mon Sep 17 00:00:00 2001 From: azmandios Date: Tue, 22 Sep 2026 01:01:24 +0300 Subject: [PATCH 1/4] build: require roach-php/core ^3.2, symfony ^7.0, php >=8.2 --- composer.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/composer.json b/composer.json index 622493a..3d1ce11 100644 --- a/composer.json +++ b/composer.json @@ -3,20 +3,20 @@ "description": "Symfony bundle for roach-php/core", "type": "symfony-bundle", "require": { - "php": ">= 8.0", - "roach-php/core": "~1.1.0", - "symfony/config": "^6.0", - "symfony/dependency-injection": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/console": "^6.0", - "symfony/serializer": "^6.0" + "php": ">= 8.2", + "roach-php/core": "^3.2", + "symfony/config": "^7.0", + "symfony/dependency-injection": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/console": "^7.0", + "symfony/serializer": "^7.0" }, "require-dev": { "roave/security-advisories": "dev-latest", - "symfony/phpunit-bridge": "^6.0", - "symfony/var-dumper": "^6.0", - "symfony/framework-bundle": "^6.0", - "symfony/maker-bundle": "^1.37", + "symfony/phpunit-bridge": "^7.0", + "symfony/var-dumper": "^7.0", + "symfony/framework-bundle": "^7.0", + "symfony/maker-bundle": "^1.68", "vimeo/psalm": "^4.21", "psalm/plugin-symfony": "^3.1", "psalm/plugin-phpunit": "^0.16.1" From 140b134c790749ca290ce1b4109a51b2d6bac905 Mon Sep 17 00:00:00 2001 From: azmandios Date: Tue, 22 Sep 2026 01:07:41 +0300 Subject: [PATCH 2/4] feat: register HttpErrorMiddleware and ProxyMiddleware for roach 3.2 --- src/Resources/config/services.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php index 0ee9c03..30748d7 100644 --- a/src/Resources/config/services.php +++ b/src/Resources/config/services.php @@ -118,6 +118,23 @@ ; $services->set(\RoachPHP\Downloader\Middleware\RobotsTxtMiddleware::class); $services->set(\RoachPHP\Downloader\Middleware\UserAgentMiddleware::class); + // New in roach-php/core 3.x: drops responses with unallowed HTTP status. + // Configure per spider via the "handleStatus" option. + $services + ->set(\RoachPHP\Downloader\Middleware\HttpErrorMiddleware::class) + ->args([ + service('roach_php.logger'), + ]) + ; + // New in roach-php/core 3.x: assigns proxies to requests. + // Configure per spider via the "proxy" or "loader" options. + $services + ->set(\RoachPHP\Downloader\Middleware\ProxyMiddleware::class) + ->args([ + service('service_container'), + service('roach_php.logger'), + ]) + ; // Extensions $services From 1c134f6accbff7e09575d5e5d6ab99ca2f9df88c Mon Sep 17 00:00:00 2001 From: azmandios Date: Tue, 22 Sep 2026 01:26:47 +0300 Subject: [PATCH 3/4] build: drop psalm dev-deps incompatible with symfony ^7.0 --- composer.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 3d1ce11..d91ec84 100644 --- a/composer.json +++ b/composer.json @@ -16,10 +16,7 @@ "symfony/phpunit-bridge": "^7.0", "symfony/var-dumper": "^7.0", "symfony/framework-bundle": "^7.0", - "symfony/maker-bundle": "^1.68", - "vimeo/psalm": "^4.21", - "psalm/plugin-symfony": "^3.1", - "psalm/plugin-phpunit": "^0.16.1" + "symfony/maker-bundle": "^1.68" }, "license": "MIT", "autoload": { From e5f4d61c47827710ee2f03763c35bab4b7a0e729 Mon Sep 17 00:00:00 2001 From: azmandios Date: Tue, 22 Sep 2026 15:45:17 +0300 Subject: [PATCH 4/4] feat: symfony 7 compat (command name, normalizer supported types) --- src/Command/RunSpiderCommand.php | 8 ++++---- src/Normalizer/ItemNormalizer.php | 9 ++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/Command/RunSpiderCommand.php b/src/Command/RunSpiderCommand.php index fe9e0a6..a7b13c6 100644 --- a/src/Command/RunSpiderCommand.php +++ b/src/Command/RunSpiderCommand.php @@ -28,10 +28,6 @@ final class RunSpiderCommand extends Command { - protected static $defaultName = 'roach:run'; - - protected static $defaultDescription = 'Run the provided spider'; - /** @var array, array> */ private array $spiderNames; @@ -45,6 +41,10 @@ public function __construct(private ServiceLocator $serviceLocator, private Seri protected function configure(): void { + $this + ->setName('roach:run') + ->setDescription('Run the provided spider'); + $spiderArgDescription = "Spider class name\nSupport spiders:\n"; foreach ($this->spiderNames as $className => $aliases) { diff --git a/src/Normalizer/ItemNormalizer.php b/src/Normalizer/ItemNormalizer.php index dfc7502..3d97ff9 100644 --- a/src/Normalizer/ItemNormalizer.php +++ b/src/Normalizer/ItemNormalizer.php @@ -14,17 +14,16 @@ namespace Nelexa\RoachPhpBundle\Normalizer; use RoachPHP\ItemPipeline\ItemInterface; -use Symfony\Component\Serializer\Normalizer\CacheableSupportsMethodInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; -class ItemNormalizer implements NormalizerInterface, CacheableSupportsMethodInterface +class ItemNormalizer implements NormalizerInterface { - public function hasCacheableSupportsMethod(): bool + public function getSupportedTypes(?string $format): array { - return true; + return [ItemInterface::class]; } - public function supportsNormalization(mixed $data, ?string $format = null): bool + public function supportsNormalization(mixed $data, ?string $format = null, array $context = []): bool { return $data instanceof ItemInterface; }