Wiederverwendbarer benutzerdefinierter ApiPlatform-Controller
Posted: 20 Jan 2025, 17:29
Ich habe einen Controller, der die Dateiverwaltung im Zusammenhang mit Entitäten übernimmt. Ich möchte, dass dieser Controller wiederverwendbar ist:
Und das ist der Controller:
Frage: Wie kann ich die ApiPlatform-Konfiguration im Controller (oder __construct) erhalten?
Code: Select all
#[ApiResource(
itemOperations: [
'deleteApiFile' => [
'method' => 'DELETE',
'path' => '/foo/{id}/delete-file',
'read' => false,
'controller' => ApiFileDeleteController::class,
],
],
)]
class Foo { /* ... */ }
#[ApiResource(
itemOperations: [
'deleteApiFile' => [
'method' => 'DELETE',
'path' => '/bar/{id}/delete-file',
'read' => false,
'controller' => ApiFileDeleteController::class,
],
],
)]
class Bar { /* ... */ }
Code: Select all
class ApiFileDeleteController
{
public function __invoke(string $id): void
{
// I have the $id now, how do I determine which entity it belongs to?
//
// Logic in this controller is always the same and always for an entity
$example = $this->em->getRepository($class)->find($id);
// How do I get $class?
}
}
- Ich könnte einen FooApiFileDeleteController und einen BarApiFileDeleteController erstellen, aber wenn ich in Zukunft erweitern möchte, muss ich weiterhin Controller hinzufügen, nur für den Klassennamen. Ich würde mir lieber jetzt ein wenig Mühe geben und muss mir in Zukunft darüber keine Sorgen mehr machen.
- Ich könnte einen Parameter und einen Standardwert hinzufügen, aber dann könnte es von einem beeinflusst werden Benutzer, das möchte ich nicht.
- Bearbeiten: Prüfe derzeit Prozessoren, basierend auf dieser ähnlichen Frage ApiPlatform v2.6 nicht unterstütze das leider