fix(bookstack) : add uriVariables to BookStackLink and BookStackSearchResult

API Platform 4 requires explicit uriVariables declaration for
URI template parameters on DTO resources.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-15 18:27:57 +01:00
parent 9908f34580
commit 06771c17e0
2 changed files with 18 additions and 0 deletions

View File

@@ -7,7 +7,10 @@ namespace App\ApiResource;
use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Delete; use ApiPlatform\Metadata\Delete;
use ApiPlatform\Metadata\GetCollection; use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use ApiPlatform\Metadata\Post; use ApiPlatform\Metadata\Post;
use App\Entity\Task;
use App\Entity\TaskBookStackLink;
use App\State\BookStackLinkProcessor; use App\State\BookStackLinkProcessor;
use App\State\BookStackLinkProvider; use App\State\BookStackLinkProvider;
use Symfony\Component\Serializer\Attribute\Groups; use Symfony\Component\Serializer\Attribute\Groups;
@@ -16,12 +19,18 @@ use Symfony\Component\Serializer\Attribute\Groups;
operations: [ operations: [
new GetCollection( new GetCollection(
uriTemplate: '/tasks/{taskId}/bookstack/links', uriTemplate: '/tasks/{taskId}/bookstack/links',
uriVariables: [
'taskId' => new Link(fromClass: Task::class, identifiers: ['id']),
],
normalizationContext: ['groups' => ['bookstack_link:read']], normalizationContext: ['groups' => ['bookstack_link:read']],
provider: BookStackLinkProvider::class, provider: BookStackLinkProvider::class,
security: "is_granted('IS_AUTHENTICATED_FULLY')", security: "is_granted('IS_AUTHENTICATED_FULLY')",
), ),
new Post( new Post(
uriTemplate: '/tasks/{taskId}/bookstack/links', uriTemplate: '/tasks/{taskId}/bookstack/links',
uriVariables: [
'taskId' => new Link(fromClass: Task::class, identifiers: ['id']),
],
denormalizationContext: ['groups' => ['bookstack_link:write']], denormalizationContext: ['groups' => ['bookstack_link:write']],
normalizationContext: ['groups' => ['bookstack_link:read']], normalizationContext: ['groups' => ['bookstack_link:read']],
provider: BookStackLinkProvider::class, provider: BookStackLinkProvider::class,
@@ -30,6 +39,10 @@ use Symfony\Component\Serializer\Attribute\Groups;
), ),
new Delete( new Delete(
uriTemplate: '/tasks/{taskId}/bookstack/links/{id}', uriTemplate: '/tasks/{taskId}/bookstack/links/{id}',
uriVariables: [
'taskId' => new Link(fromClass: Task::class, identifiers: ['id']),
'id' => new Link(fromClass: TaskBookStackLink::class, identifiers: ['id']),
],
provider: BookStackLinkProvider::class, provider: BookStackLinkProvider::class,
processor: BookStackLinkProcessor::class, processor: BookStackLinkProcessor::class,
security: "is_granted('IS_AUTHENTICATED_FULLY')", security: "is_granted('IS_AUTHENTICATED_FULLY')",

View File

@@ -6,6 +6,8 @@ namespace App\ApiResource;
use ApiPlatform\Metadata\ApiResource; use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\GetCollection; use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Link;
use App\Entity\Task;
use App\State\BookStackSearchResultProvider; use App\State\BookStackSearchResultProvider;
use Symfony\Component\Serializer\Attribute\Groups; use Symfony\Component\Serializer\Attribute\Groups;
@@ -13,6 +15,9 @@ use Symfony\Component\Serializer\Attribute\Groups;
operations: [ operations: [
new GetCollection( new GetCollection(
uriTemplate: '/tasks/{taskId}/bookstack/search', uriTemplate: '/tasks/{taskId}/bookstack/search',
uriVariables: [
'taskId' => new Link(fromClass: Task::class, identifiers: ['id']),
],
normalizationContext: ['groups' => ['bookstack_search:read']], normalizationContext: ['groups' => ['bookstack_search:read']],
provider: BookStackSearchResultProvider::class, provider: BookStackSearchResultProvider::class,
security: "is_granted('IS_AUTHENTICATED_FULLY')", security: "is_granted('IS_AUTHENTICATED_FULLY')",