Php 使用angular 4在symfony中接收POST参数时遇到困难

Php 使用angular 4在symfony中接收POST参数时遇到困难,php,angular,symfony,Php,Angular,Symfony,我使用symfony和angular 4。两者都是不同的项目。在symfony中,我返回一个post变量,该变量通过angular发送。我只是返回值。没有别的了 但它返回的是空白值。但是,当我使用postman测试symfony url时,它返回了正确的值 符号代码 header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST'); header('Access-Control-

我使用symfony和angular 4。两者都是不同的项目。在symfony中,我返回一个post变量,该变量通过angular发送。我只是返回值。没有别的了

但它返回的是空白值。但是,当我使用postman测试symfony url时,它返回了正确的值

符号代码

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers:Content-Type,Accept');

return new Response("a-".$request->request->get('roll')."-b"); //gives  '**a- -b**' in console. but from postman gives `a-2-b`
this.http.post("http://localhost:8000/user/login",{roll:2}).subscribe(
      (data) => console.log(data)
);
角度代码

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header('Access-Control-Allow-Headers:Content-Type,Accept');

return new Response("a-".$request->request->get('roll')."-b"); //gives  '**a- -b**' in console. but from postman gives `a-2-b`
this.http.post("http://localhost:8000/user/login",{roll:2}).subscribe(
      (data) => console.log(data)
);

你的邮递员的邮递请求与天使的邮递请求不同 在Angular中,您可能需要添加
内容类型:application/json
标题


为了调试,我建议您将这两个请求与登录symfony代码进行比较

您的邮递员的POST请求与Angular的POST请求不同 在Angular中,您可能需要添加
内容类型:application/json
标题


为了调试,我建议您将这两个请求与登录symfony代码进行比较

我不是100%确定,但我相信您必须使用JSON。从角度上对对象进行字符串化:

this.http.post("http://localhost:8000/user/login",JSON.stringify({roll:2})).subscribe(
      (data) => console.log(data)
);
接下来,正如上面的评论所说。默认情况下,Symfony处理x-www-form-urlencoded body。对于JSON请求,您需要自己解析它

e、 g:

现在,在每个控制器操作中执行此操作可能看起来很乏味,您将丢失Symfony参数包

您可以通过创建请求侦听器来解决此问题:

e、 g:

此侦听器执行以下操作:

当请求传入时,它会检查是否有任何内容,以及请求是否为json。然后它尝试对请求进行json_解码,并将其插入请求参数包中。($request->request…)

接下来,您必须注册此侦听器:

e、 g:

从现在开始,如果您的请求类型为application/json,并且包含有效的json,那么您可以在请求参数包中找到它的值:

public function someAction(Request $request)
{
    $request->request->all() //holds the json
}

正如我从您的示例中看到的,您也在控制器中设置了CORS头。你也可以用同样的方法编写一个CORS监听器来为你处理这个问题。

我不是100%确定,但我相信你必须使用JSON。在角度方面对你的对象进行字符串化:

this.http.post("http://localhost:8000/user/login",JSON.stringify({roll:2})).subscribe(
      (data) => console.log(data)
);
接下来,正如上面的评论所说。默认情况下,Symfony处理x-www-form-urlencoded body。对于JSON请求,您需要自己解析它

e、 g:

现在,在每个控制器操作中执行此操作可能看起来很乏味,您将丢失Symfony参数包

您可以通过创建请求侦听器来解决此问题:

e、 g:

此侦听器执行以下操作:

当请求传入时,它会检查是否有任何内容,以及请求是否为json。然后它尝试对请求进行json_解码,并将其插入请求参数包中。($request->request…)

接下来,您必须注册此侦听器:

e、 g:

从现在开始,如果您的请求类型为application/json,并且包含有效的json,那么您可以在请求参数包中找到它的值:

public function someAction(Request $request)
{
    $request->request->all() //holds the json
}

正如我从您的示例中看到的,您也在控制器中设置了CORS头。您也可以用同样的方法编写CORS侦听器来处理此问题。

尝试此代码以查看是否获得数据$data=json\u decode($request->getContent(),true);转储(数据);postman中完全空白也使用angular应用程序在两个位置都空白通过post angular以内容类型发送数据:application/json和symfony expecte内容类型est application/x-www-form-urlencoded这就是为什么要获得空白请尝试以下代码以查看是否获得数据$data=json\u decode($request->getContent(),true);转储(数据);完全空白的邮递员将你的角度应用在两个地方空白,通常通过后角发送数据作为内容类型:应用程序/JSON和SyfONE预想内容类型EST应用程序/XWWW格式URL编码,这就是为什么你得到空白。