-
-
Notifications
You must be signed in to change notification settings - Fork 913
feat(metadata) Customize Resource & operations #7213
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat(metadata) Customize Resource & operations #7213
Conversation
d9fd4f2
to
15dcaa4
Compare
15dcaa4
to
7f165b9
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Really cool, this is a follow up for php configured metadata as this allows to mutate vendor operations. I'll probably demonstrate this shortly.
I'd recommend to add a ResourceMutatorInterface. Obviously we should introduce an AsOperationMutator. I'd suggest that it takes:
public readonly string $operationName
URI Template would be nice as well but it will probably match several operations, therefore it's probably better to just use the $operationName
.
use ApiPlatform\Metadata\Resource\ResourceMetadataCollection; | ||
use Psr\Container\ContainerInterface; | ||
|
||
final class CustomResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
final class CustomResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface | |
final class MutatorResourceMetadataCollectionFactory implements ResourceMetadataCollectionFactoryInterface |
|
||
foreach ($resourceMetadataCollection as $resource) { | ||
foreach ($this->resourceMutators->get($resourceClass) as $mutators) { | ||
$resource = $mutators($resource); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
an interface would be able for typehint to know what the callable arguments are and make the code a little bit cleaner
The idea of this feature is to allow customizing built-in endpoints from a third party API (ex Sylius E-commerce API).