2017-12-26 16 views
0

Ich habe eine Funktion in Symfony3, die Daten an eine MySQL-Datenbank sendet. Die Funktion sieht wie folgt aus:Post-Anfrage mit Symfony 3?

/** 
* @Route("/LegoPieces") 
* @METHOD("POST") 
* @View() 
* 
* @Annotations\QueryParam(
* name="piece", nullable=false, description="piece" 
*) 
* @Annotations\QueryParam(
* name="type", nullable=false, description="type" 
*) 
* @Annotations\QueryParam(
* name="startDate", nullable=false, description="Start Date YYYY-MM-DD HH:MM:SS (Should be in the future)" 
*) 
* @Annotations\QueryParam(
* name="endDate", nullable=false, description="End Date YYYY-MM-DD HH:MM:SS (Should be no more than 3 weeks in the future)" 
*) 
*/ 
public function postAction(ParamFetcherInterface $paramFetcher) 
{ 
    $piece = $paramFetcher->get('piece'); 
    $type = $paramFetcher->get('type'); 
    $start = $paramFetcher->get('startDate'); 
    $end = $paramFetcher->get('endDate'); 
    $startDate = DateTime::createFromFormat('Y-m-d H:i:s', $start); 
    $endDate = DateTime::createFromFormat(' Y-m-d H:i:s', $end); 
    $em = $this->getDoctrine()->getManager('default'); 
    $data = new LegoPieces(); 
    $data->setPiece($piece); 
    $data->setType($type); 
    $data->setStartDate($startDate); 
    $data->setEndDate($endDate); 
    $em->persist($data); 
    $em->flush(); 

    return new JsonResponse("LegoPieces Added Successfully", 200); 
} 

Wenn ich die Variablen ($ Stück, $ type, $ startdate, $ endDate) mit Streichern der Post-Anforderung arbeitet ersetzen. Aber wenn ich versuche, eine Post-Anforderung durch so etwas wie Postman oder Javascript wie diese zu machen:

fetch("http://localhost:8000/LegoPieces", { 
    method: "POST", 
    body: { 
     startDate: this.startDate, 
     endDate: this.endDate, 
     piece: this.piece, 
     type: this.type 
    } 
    }).then(response => response.json()) 
); 
}); 

Ich erhalte einen 500-Fehler! Ich verstehe das nicht - danke für deine Hilfe!

+0

Haben Sie symfony Profiler Ergebnisse überprüfen? – LugiHaue

Antwort

2

Suchen Sie in Ihren Protokollen, was ist Ihr Fehler.

Aber Sie müssen Ihren Controller verbessern! Sie verwenden Symfony Form nicht und Sie haben keine Validierungen. Selbst wenn Sie jetzt keinen Fehler von 500 haben, werden Sie in Zukunft einige haben, wenn Sie Ihre Entitätstypen nicht respektieren.

Ich verstehe auch nicht, warum Sie eine Post-Anfrage verwenden und nicht alle Ihre Parameter in Ihrem Körper übergeben. Sie verwenden nur get-Parameter in der URL.

+0

Ich hatte ursprünglich die Post-Anfrage in Javascript mit dem Körper verwendet, um Parameter übergeben (ich habe den Beitrag bearbeitet), aber es zeigt nichts. Der Fehler sagt "Call to a member function format() on boolean" - es zeigt dies, denke ich, weil es nicht den Datumsparameter bekommt! – Nespony

+0

@Nespony Ja, Sie sollten die Form-Komponente verwenden, um die Hydration Ihrer Entitäten zu verwalten und sie zu überprüfen :) Damit müssen Sie sich nicht um Ihre Parameter, das Datumsformat und die Erstellung kümmern. Nach der Validierung können Sie (mit den guten Behauptungen) davon ausgehen, dass Ihre Entität in db persistiert werden kann – Mcsky

-1

Ohne zu wissen, was Ausnahme macht, dass 500 - Sie wissen nichts :(

Try Antwort Körper

Ohne diese Informationen zu sehen -. I nur eine Idee haben

Wenn Sie auf dev ARW Arbeits envionment, dann youur js Anfrage kann einfach nicht sehen Routen (und die anderen Sachen)

löschen Sie alle Inhalte des Cache-Ordner

rm -rf var/cache/*

und

php bin/console c:w -e prod