Skip to content
Snippets Groups Projects

Swap the variations resource controller method

Files

<?php declare(strict_types=1);
namespace Drupal\commerce_api\Routing;
use Drupal\Core\Routing\RouteSubscriberBase;
use Drupal\jsonapi\ResourceType\ResourceType;
use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface;
use Drupal\jsonapi\Routing\Routes as JsonapiRoutes;
use Symfony\Cmf\Component\Routing\RouteObjectInterface;
use Symfony\Component\Routing\RouteCollection;
final class JsonapiRouteSubscriber extends RouteSubscriberBase {
/**
* The resource type repository.
*
* @var \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface
*/
private $resourceTypeRepository;
/**
* Constructs a new JsonapiRouteSubscriber object.
*
* @param \Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface $resource_type_repository
* The resource type repository.
*/
public function __construct(ResourceTypeRepositoryInterface $resource_type_repository) {
$this->resourceTypeRepository = $resource_type_repository;
}
/**
* {@inheritdoc}
*/
protected function alterRoutes(RouteCollection $collection) {
$product_resource_types = array_filter($this->resourceTypeRepository->all(), static function (ResourceType $resource_type) {
return $resource_type->getEntityTypeId() === 'commerce_product';
});
foreach ($product_resource_types as $resource_type) {
$variations_relationship_route_name = JsonapiRoutes::getRouteName($resource_type, 'variations.relationship.get');
$variations_relationship_route = $collection->get($variations_relationship_route_name);
if ($variations_relationship_route !== NULL) {
$variations_relationship_route->setDefault(RouteObjectInterface::CONTROLLER_NAME, 'commerce_api.jsonapi_controller_shim:getVariationRelationship');
}
}
}
}
Loading