2016-10-29 4 views
0

Ich bin ein Anfänger in Symfony 3.Empfangen von POST-Daten in Symfony

Ich habe ein Problem mit dem Empfangen von Post-Daten.

Mein Controller enthält eine Aktion "test":

use FOS\RestBundle\Request\ParamFetcher; 
use FOS\RestBundle\Controller\Annotations\Post; 
use FOS\RestBundle\Controller\Annotations\RequestParam 

.... 

/** 
* @Post("/test") 
* @RequestParam(name="test") 
*/ 
public function testAction(ParamFetcher $paramFetcher) 
{ 
    var_dump($paramFetcher->get('test')); 
    var_dump('the end'); 
} 

Wenn ich eine Anfrage senden (I-klebte schrieb es aus Chrom-Tool für Entwickler):

General: 
Request URL:http://service-user.local/app_dev.php/test 
Request Method:POST 
Status Code:400 Bad Request 
Remote Address:127.0.0.1:80 

Response Headers 
view source 
Cache-Control:no-cache 
Connection:keep-alive 
Content-Type:application/json 
Date:Sat, 29 Oct 2016 06:06:05 GMT 
Server:nginx/1.11.5 
Transfer-Encoding:chunked 
X-Debug-Token:1021bb 
X-Debug-Token-Link:http://service-user.local/app_dev.php/_profiler/1021bb 
X-Powered-By:PHP/7.0.11 

Request Headers 
view source 
Accept:*/* 
Accept-Encoding:gzip, deflate, lzma 
Accept-Language:pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4 
Connection:keep-alive 
Content-Length:9 
Content-Type:text/plain;charset=UTF-8 
Host:service-user.local 
Origin:chrome-extension://kajfghlhfkcocafkcjlajldicbikpgnp 
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36 OPR/40.0.2308.81 

Request Payload 
test=test 

ich eine Antwort erhalten:

{"error":{"code":400,"message":"Bad Request","exception":[{"message":"Parameter \"test\" of value \"NULL\" violated a constraint \"This value should not be null.\"","class":"FOS\\RestBundle\\Exception\\InvalidParameterException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"\/code\/vendor\/friendsofsymfony\/rest-bundle\/Exception\/InvalidParameterException.php","line":68,"args":[]},{"namespace":"FOS\\RestBundle\\Exception","short_class":"InvalidParameterException","class":"FOS\\RestBundle\\Exception\\InvalidParameterException","type":"::","function":"withViolationsAndMessage","file":"\/code\/vendor\/friendsofsymfony\/rest-bundle\/Exception\/InvalidParameterException.php","line":52,"args":[["object","FOS\\RestBundle\\Controller\\Annotations\\RequestParam"],["object","Symfony\\Component\\Validator\\ConstraintViolationList"],["string","Parameter \"test\" of value \"NULL\" violated a constraint \"This value should not be null.\""]]},{"namespace":"FOS\\RestBundle\\Exception","short_class":"InvalidParameterException","class":"FOS\\RestBundle\\Exception\\InvalidParameterException","type":"::","function":"withViolations","file":"\/code\/vendor\/friendsofsymfony\/rest-bundle\/Request\/ParamFetcher.php","line":162,"args":[["object","FOS\\RestBundle\\Controller\\Annotations\\RequestParam"],["object","Symfony\\Component\\Validator\\ConstraintViolationList"]]},{"namespace":"FOS\\RestBundle\\Request","short_class":"ParamFetcher","class":"FOS\\RestBundle\\Request\\ParamFetcher","type":"->","function":"cleanParamWithRequirements","file":"\/code\/vendor\/friendsofsymfony\/rest-bundle\/Request\/ParamFetcher.php","line":108,"args":[["object","FOS\\RestBundle\\Controller\\Annotations\\RequestParam"],["null",null],["boolean",true]]},{"namespace":"FOS\\RestBundle\\Request","short_class":"ParamFetcher","class":"FOS\\RestBundle\\Request\\ParamFetcher","type":"->","function":"get","file":"\/code\/src\/AppBundle\/Controller\/DefaultController.php","line":24,"args":[["string","test"]]},{"namespace":"AppBundle\\Controller","short_class":"DefaultController","class":"AppBundle\\Controller\\DefaultController","type":"->","function":"testAction","file":null,"line":null,"args":[["object","FOS\\RestBundle\\Request\\ParamFetcher"]]},{"namespace":"","short_class":"","class":"","type":"","function":"call_user_func_array","file":"\/code\/vendor\/symfony\/symfony\/src\/Symfony\/Component\/HttpKernel\/HttpKernel.php","line":153,"args":[["array",[["object","AppBundle\\Controller\\DefaultController"],["string","testAction"]]],["array",[["object","FOS\\RestBundle\\Request\\ParamFetcher"]]]]},{"namespace":"Symfony\\Component\\HttpKernel","short_class":"HttpKernel","class":"Symfony\\Component\\HttpKernel\\HttpKernel","type":"->","function":"handleRaw","file":"\/code\/vendor\/symfony\/symfony\/src\/Symfony\/Component\/HttpKernel\/HttpKernel.php","line":68,"args":[["object","Symfony\\Component\\HttpFoundation\\Request"],["string","1"]]},{"namespace":"Symfony\\Component\\HttpKernel","short_class":"HttpKernel","class":"Symfony\\Component\\HttpKernel\\HttpKernel","type":"->","function":"handle","file":"\/code\/vendor\/symfony\/symfony\/src\/Symfony\/Component\/HttpKernel\/Kernel.php","line":169,"args":[["object","Symfony\\Component\\HttpFoundation\\Request"],["string","1"],["boolean",true]]},{"namespace":"Symfony\\Component\\HttpKernel","short_class":"Kernel","class":"Symfony\\Component\\HttpKernel\\Kernel","type":"->","function":"handle","file":"\/code\/web\/app_dev.php","line":30,"args":[["object","Symfony\\Component\\HttpFoundation\\Request"]]}]}]}} 

Was ist das Problem? Sollte ich etwas konfigurieren?

Antwort

1

Sie Nutzdaten scheint nicht richtig JSON zu sein? Es sollte mehr wie folgt aussehen:

{ "foo" : "bar", "name" : "John" } 

Wenn Sie die Daten mit jquery einreichen Sie die .serialize() Funktion auf dem Formular verwenden würde. Wenn Sie die Daten als eine einzelne Variable einreichen einfach die Nachricht wie folgt definieren:

{ "test" : "test" } 

Nach der Dokumentation bei http://symfony.com/doc/current/bundles/FOSRestBundle/param_fetcher_listener.html wenn es nicht Ihre Parameter mag wird es einen 400-Fehler zurück, das ist, was du bist bekommen.

+0

Danke, es war sehr hilfreich! – Simon