Skip to content

Commit

Permalink
fix(serializer): find parent class operation (#5449)
Browse files Browse the repository at this point in the history
fixes #5438
  • Loading branch information
soyuka authored Mar 10, 2023
1 parent c1fb7db commit 01ce3f8
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 0 deletions.
12 changes: 12 additions & 0 deletions features/jsonld/inheritance.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Feature: Inheritance with correct IRIs
In order to fix (https://github.com/api-platform/core/issues/5438)

Scenario: Get the collection of people with its employees
When I add "Accept" header equal to "application/json"
And I send a "GET" request to "/people_5438"
Then print last JSON response

Scenario: Get the collection of people with its employees
When I add "Accept" header equal to "application/ld+json"
And I send a "GET" request to "/people_5438"
Then print last JSON response
1 change: 1 addition & 0 deletions src/Serializer/AbstractItemNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ public function normalize($object, $format = null, array $context = [])
}

if (isset($context['operation']) && $context['operation'] instanceof CollectionOperationInterface) {
unset($context['operation_name']);
unset($context['operation']);
unset($context['iri']);
}
Expand Down
33 changes: 33 additions & 0 deletions tests/Fixtures/TestBundle/ApiResource/Issue5438/Contractor.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

/*
* This file is part of the API Platform project.
*
* (c) Kévin Dunglas <dunglas@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace ApiPlatform\Tests\Fixtures\TestBundle\ApiResource\Issue5438;

use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\Operation;

#[Get(
shortName: 'Contractor5438',
uriTemplate: 'contractor_5438/{id}',
provider: [Contractor::class, 'getContractor'],
)]
class Contractor extends Person
{
public static function getContractor(Operation $operation, array $uriVariables = []): self
{
return new self(
$uriVariables['id'],
'a'
);
}
}
33 changes: 33 additions & 0 deletions tests/Fixtures/TestBundle/ApiResource/Issue5438/Employee.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

/*
* This file is part of the API Platform project.
*
* (c) Kévin Dunglas <dunglas@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace ApiPlatform\Tests\Fixtures\TestBundle\ApiResource\Issue5438;

use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\Operation;

#[Get(
shortName: 'Employee5438',
uriTemplate: 'employee_5438/{id}',
provider: [Employee::class, 'getEmployee']
)]
class Employee extends Person
{
public static function getEmployee(Operation $operation, array $uriVariables = []): self
{
return new self(
$uriVariables['id'],
'a'
);
}
}
43 changes: 43 additions & 0 deletions tests/Fixtures/TestBundle/ApiResource/Issue5438/Person.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

/*
* This file is part of the API Platform project.
*
* (c) Kévin Dunglas <dunglas@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace ApiPlatform\Tests\Fixtures\TestBundle\ApiResource\Issue5438;

use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Operation;

#[GetCollection(
shortName: 'People5438',
uriTemplate: 'people_5438',
provider: [Person::class, 'getData']
)]
abstract class Person
{
public function __construct(public readonly ?int $id = null, public readonly ?string $name = null)
{
}

public static function getData(Operation $operation, array $uriVariables = []): iterable
{
return [
new Contractor(
1,
'a'
),
new Employee(
2,
'b'
),
];
}
}

0 comments on commit 01ce3f8

Please sign in to comment.