使用Rest POST将数据从angularjs形式发送到symfony2

时间:2015-03-10 13:55:46

标签: php mysql angularjs rest symfony

我正在关注本教程http://welcometothebundle.com/web-api-rest-with-symfony2-the-best-way-the-post-method/,但我在angularjs中有一个客户端,在symfony上有一个rest API。

我的问题是我仍然不知道如何将我在angularjs中的表格中的数据发送到symfony2的控制器,然后发送到数据库Mysql。

更新: 我知道如何在客户端控制器中静态地将数据添加到数据库,但是如何使用来自angularjs形式的值来执行此操作

public function insertAction()
    {
$client = new Client();
    $client->setName('cccccccc');
    $client->setAdress('ffffffff');
    $client->setCivilit('sssssssss');
    $em = $this->getDoctrine()->getManager();
    $em->persist($client);
    $em->flush();

    return new Response('Id du client créé : '.$client->getId());

这是我定义控制器的app.js:

.controller('PostsCtrlAjax1', ['$scope', '$http' ,function($scope,$http) {

   $http({method: 'POST', url: 'http://localhost/operation/web/app_dev.php/apiclient/insertcl.json'})
   .success(function(data){
        $scope.posts = data; // response data 
   }).error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
    console.log("data error ...");
  });
}]);

当我运行我的客户端angularjs时,静态数据将存储在数据库中 请任何想法,谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

因此,要将来自angularJS客户端的数据存储到symfony2服务器,您必须执行以下操作:

安装一个简单的侦听器来处理Symfony中的json请求

qandidate-labs/symfony-json-request-transformer

客户表格(示例)

<form ng-submit="submitForm()">
    <input ng-model="postData.name"/>
    <input ng-model="postData.address"/>
    <input ng-model="postData.civility"/>
</form>

提交表单操作(客户端)

$scope.postData = {};

$scope.submitForm = function(){

    $http.post('http://localhost/operation/web/app_dev.php/apiclient/postRoute', $scope.postData);
        .success(function(data){
            $scope.posts = data; // response data, not get data from DB.
        }).error(function(data, status, headers, config) {
            // called asynchronously if an error occurs
            // or server returns response with an error status.
            console.log("data error ...");
        });
};

商店行为(服务器)

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

//...
public function insertAction()
{
    $request = new Request();
    $request = $request->createFromGlobals();

    $client = new Client();
    $client->setName($request->request->get('name'));
    $client->setAdress($request->request->get('address'));
    $client->setCivilit($request->request->get('civility'));

    $em = $this->getDoctrine()->getManager();
    $em->persist($client);
    $em->flush();

    return new JsonResponse('Id du client créé : '.$client->getId());
}

如果要为重载范围变量返回数据,请将其添加到方法中:

//...
$clients = $em->getRepository('YourBundle:Client')->findAll();
//...

并将您的回报更改为:

//...
return new JsonResponse($clients);

然后,返回的响应将包含您的数据,$ scope.posts将使用新的注册数据进行刷新。

答案 1 :(得分:1)

您可以使用:

$info = $request->getContent();
$data = json_decode($info,true);

然后使用: $client->setName($data['name']);