Die API-Plattform verwendet Post, um Daten mithilfe einer Eingabe abzurufenPhp

PHP-Programmierer chatten hier
Anonymous
 Die API-Plattform verwendet Post, um Daten mithilfe einer Eingabe abzurufen

Post by Anonymous »

Ich arbeite mit Api Platform, Symfony und Doctrine. Ich erwarte einen JSON-Code eines Objekts von meinem Frontend, der für die Beschaffung der Daten von meinem Backend unerlässlich ist. Da GET-Anfragen keinen Text haben/haben sollten, glaube ich, dass eine Post()-Operation der beste Weg ist, mein Ziel zu erreichen. Ich habe meiner Entität ein Attribut hinzugefügt, das wie folgt aussieht:

Code: Select all

#[ORM\Entity(repositoryClass: EntityRepository::class)]
#[ApiResource(
operations: [
new Post(
input: InputDto::class,
provider: StateProvider::class,
output: OutputDto::class,
uriTemplate: 'entity/{variable}',
uriVariables: ['variable' => 'variable'],
)
]
)]
Mein Bundesstaatsanbieter ähnelt dem folgenden Beispiel:

Code: Select all

class StateProvider implements ProviderInterface
{
public function __construct(
private RequestStack $requestStack
)
{
$this->requestStack = $requestStack;
}

public function provide(Operation $operation, array $uriVariables = [], array $context = []): object|array|null
{
$variable = $uriVariables['variable'] ?? null;

// logic

$outputDto = new OutputDto($dataProcuredFromLogic);

return $outputDto;
}
}
Die Logik scheint einwandfrei zu funktionieren. Wenn ich print_r($outputDto); direkt vor der Return-Anweisung hinzufüge, erhalte ich genau die Daten, die ich erwartet habe. Aber wenn ich die Anfrage ausführe, ist die Antwort genau das gleiche InputDto, das ich über den Hauptteil der Anfrage gesendet habe, und nicht das zurückgegebene $outputDto des Anbieters.
Da frage ich mich, ob das, was ich erreichen wollte, überhaupt möglich ist.
Ich habe versucht, einen Statusprozessor anstelle eines Anbieters zu verwenden und genau die gleiche Logik zu verwenden. Der einzige Unterschied besteht darin, dass ich keinen RequestStack benötigte, um die Eingabedaten zu erhalten, da diese in den Parametern der Methode „process()“ enthalten waren und ich den Rückgabetyp der Methode „process()“ in „OutputDto“ ändern musste. Ich habe dort einen Fehler erhalten, der so aussah:

Code: Select all

"[Semantical Error] line 0, col 75 near 'property = :property_p1': Error: Class App\\Entity\\Entity has no field or association named property"
Ich vermute, dass es etwas mit Doctrine zu tun hat, weil „:property_p1“ etwas ähnelt, das wie ein Parameter aussieht, der auf einem QueryBuilder gesetzt wurde, aber wie gesagt, die Logik, einschließlich meiner DQL-Abfragen, schien gut zu funktionieren, als ich meine Ergebnisse mit print_r() gedruckt habe.
Ich bin mir nicht sicher, ob ich einen Controller verwenden sollte, wie ich ihn habe Lesen Sie, dass davon in der API-Plattform-Dokumentation abgeraten wird.
Könnten Sie mir helfen, die tatsächlich gewünschte Ausgabe zurückzugeben?
Vielen Dank im Voraus für jede Hilfe, die Sie leisten können!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post