From dcce0fffd8078fdfb9e68beb53a79ba867b86733 Mon Sep 17 00:00:00 2001 From: Bojan Bogdanovic Date: Wed, 17 Dec 2025 15:59:12 +0100 Subject: [PATCH 1/2] fix(next): make EntityResource constructor compatible with Drupal 10 and 11 --- .../next_jsonapi/next_jsonapi.services.yml | 12 +----- .../src/Controller/EntityResource.php | 40 ++++++------------- .../Kernel/Controller/EntityResourceTest.php | 1 + 3 files changed, 14 insertions(+), 39 deletions(-) diff --git a/modules/next/modules/next_jsonapi/next_jsonapi.services.yml b/modules/next/modules/next_jsonapi/next_jsonapi.services.yml index 1286297d1..9b8f14e89 100644 --- a/modules/next/modules/next_jsonapi/next_jsonapi.services.yml +++ b/modules/next/modules/next_jsonapi/next_jsonapi.services.yml @@ -4,16 +4,6 @@ parameters: services: jsonapi.entity_resource: class: Drupal\next_jsonapi\Controller\EntityResource + autowire: true arguments: - - '@entity_type.manager' - - '@entity_field.manager' - - '@jsonapi.resource_type.repository' - - '@renderer' - - '@entity.repository' - - '@jsonapi.include_resolver' - - '@jsonapi.entity_access_checker' - - '@jsonapi.field_resolver' - - '@jsonapi.serializer' - - '@datetime.time' - - '@current_user' - '%next_jsonapi.size_max%' diff --git a/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php b/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php index a05cd17f9..8d705cb69 100644 --- a/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php +++ b/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php @@ -28,39 +28,23 @@ class EntityResource extends JsonApiEntityResource { * * @var int */ - protected $maxSize; + protected int $maxSize; /** * EntityResource constructor. * - * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager - * The entity type manager. - * @param \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager - * The entity type field manager. - * @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository - * The JSON:API resource type repository. - * @param \Drupal\Core\Render\RendererInterface $renderer - * The renderer. - * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository - * The entity repository. - * @param \Drupal\jsonapi\IncludeResolver $include_resolver - * The include resolver. - * @param \Drupal\jsonapi\Access\EntityAccessChecker $entity_access_checker - * The JSON:API entity access checker. - * @param \Drupal\jsonapi\Context\FieldResolver $field_resolver - * The JSON:API field resolver. - * @param \Symfony\Component\Serializer\SerializerInterface|\Symfony\Component\Serializer\Normalizer\DenormalizerInterface $serializer - * The JSON:API serializer. - * @param \Drupal\Component\Datetime\TimeInterface $time - * The time service. - * @param \Drupal\Core\Session\AccountInterface $user - * The current user account. - * @param int $max_size - * The offset max size. + * @param mixed ...$args + * All constructor arguments. */ - public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, ResourceTypeRepositoryInterface $resource_type_repository, RendererInterface $renderer, EntityRepositoryInterface $entity_repository, IncludeResolver $include_resolver, EntityAccessChecker $entity_access_checker, FieldResolver $field_resolver, SerializerInterface $serializer, TimeInterface $time, AccountInterface $user, int $max_size) { - parent::__construct($entity_type_manager, $field_manager, $resource_type_repository, $renderer, $entity_repository, $include_resolver, $entity_access_checker, $field_resolver, $serializer, $time, $user); - $this->maxSize = $max_size; + public function __construct(...$args) { + // Pop the last argument as $maxSize. + $this->maxSize = array_pop($args); + + // Forward the remaining arguments to the parent constructor. + // We handle it this way because the parent constructor arguments + // differ between Drupal 10 and Drupal 11, so using ...$args + // ensures compatibility across versions. + parent::__construct(...$args); } /** diff --git a/modules/next/modules/next_jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php b/modules/next/modules/next_jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php index f87938587..068c0cdbc 100644 --- a/modules/next/modules/next_jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php +++ b/modules/next/modules/next_jsonapi/tests/src/Kernel/Controller/EntityResourceTest.php @@ -72,6 +72,7 @@ public function register(ContainerBuilder $container) { if ($container->hasDefinition('jsonapi.entity_resource')) { $definition = $container->getDefinition('jsonapi.entity_resource'); $definition->setClass('Drupal\next_jsonapi\Controller\EntityResource') + ->setAutowired(TRUE) ->addArgument('%next_jsonapi.size_max%'); } } From 8e4b16af1d42c8f071bac02949ea74515515aa61 Mon Sep 17 00:00:00 2001 From: Bojan Bogdanovic Date: Wed, 17 Dec 2025 16:14:46 +0100 Subject: [PATCH 2/2] Fix unused use statements --- .../next_jsonapi/src/Controller/EntityResource.php | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php b/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php index 8d705cb69..ed3ba954c 100644 --- a/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php +++ b/modules/next/modules/next_jsonapi/src/Controller/EntityResource.php @@ -2,21 +2,10 @@ namespace Drupal\next_jsonapi\Controller; -use Drupal\Component\Datetime\TimeInterface; -use Drupal\Core\Entity\EntityFieldManagerInterface; -use Drupal\Core\Entity\EntityRepositoryInterface; -use Drupal\Core\Entity\EntityTypeManagerInterface; -use Drupal\Core\Render\RendererInterface; -use Drupal\Core\Session\AccountInterface; -use Drupal\jsonapi\Access\EntityAccessChecker; -use Drupal\jsonapi\Context\FieldResolver; use Drupal\jsonapi\Controller\EntityResource as JsonApiEntityResource; -use Drupal\jsonapi\IncludeResolver; use Drupal\jsonapi\Query\OffsetPage; use Drupal\jsonapi\ResourceType\ResourceType; -use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\Serializer\SerializerInterface; /** * Process all entity requests.