2015-04-03 2 views
0

У меня есть форма, которую я отправляю с использованием метода angularJS http.Symfony 2 Angular JS HTTP POST

код:

<script> 
    // define angular module/app 
    var formApp = angular.module('formApp', []); 
    // create angular controller and pass in $scope and $http 
    function formController($scope, $http) { 
     // create a blank object to hold our form information 
     // $scope will allow this to pass between controller and view 
     $scope.formData = {}; 
     // process the form 
     $scope.processForm = function() { 
      $http({ 
       method: 'POST', 
       url: 'http://localhost/angular/web/app_dev.php/testcall', 
       data: $.param($scope.formData), // pass in data as strings 
       headers: {'Content-Type': 'application/x-www-form-urlencoded'} // set the headers so angular passing info as form data (not request payload) 
      }) 
        .success(function (data) { 
         console.log(data); 
         if (!data.success) { 
          // if not successful, bind errors to error variables 
          $scope.errorName = data.errors.name; 
          $scope.errorSuperhero = data.errors.superheroAlias; 
         } else { 
          // if successful, bind success message to message 
          $scope.message = data.message; 
          $scope.errorName = ''; 
          $scope.errorSuperhero = ''; 
         } 
        }); 
     }; 
    } 
</script> 

моя форма:

<div class="container"> 
    <div class="col-md-6 col-md-offset-3"> 

     <!-- PAGE TITLE --> 
     <div class="page-header"> 
      <h1><span class="glyphicon glyphicon-tower"></span> Submitting Forms with Angular</h1> 
     </div> 

     <!-- SHOW ERROR/SUCCESS MESSAGES --> 
     <div id="messages" class="well" ng-show="message">{% verbatim %}{{ message}}{% endverbatim %}</div> 

     <!-- FORM --> 
     <form ng-submit="processForm()"> 
      <!-- NAME --> 
      <div id="name-group" class="form-group" ng-class="{ 'has-error' : errorName }"> 
       <label>Name</label> 
       <input type="text" name="name" class="form-control" placeholder="Bruce Wayne" ng-model="formData.name"> 
       <span class="help-block" ng-show="errorName">{% verbatim %}{{ errorName}}{% endverbatim %}</span> 
      </div> 

      <!-- SUPERHERO NAME --> 
      <div id="superhero-group" class="form-group" ng-class="{ 'has-error' : errorSuperhero }"> 
       <label>Superhero Alias</label> 
       <input type="text" name="superheroAlias" class="form-control" placeholder="Caped Crusader" ng-model="formData.superheroAlias"> 
       <span class="help-block" ng-show="errorSuperhero">{% verbatim %}{{ errorSuperhero}}{% endverbatim %}</span> 
      </div> 

      <!-- SUBMIT BUTTON --> 
      <button type="submit" class="btn btn-success btn-lg btn-block"> 
       <span class="glyphicon glyphicon-flash"></span> Submit! 
      </button> 
     </form> 

     <!-- SHOW DATA FROM INPUTS AS THEY ARE BEING TYPED --> 
     <pre> 
      {% verbatim %}{{ formData}}{% endverbatim %} 
     </pre> 

    </div> 
</div> 

моя функция, где я хочу, чтобы мои данные формы из запроса HTTP:

/** 
* @Route("/testcall") 
* @Template() 
*/ 
public function testAction() { 
    var_dump($_POST); 
    exit; 
} 

Единственное, что я получаю это url:

http://localhost/angular/web/app_dev.php/test?name=Tommie&superheroAlias=Crawford

Значения из формы сохраняются в URL-адресе. Но его нет в переменной $ _POST .. Его похоже, что функция testAction никогда не получает доступ

Как я могу это исправить?

+0

взгляд на https://github.com/FriendsOfSymfony/FOSRestBundle, чтобы предоставить API для вашего приложения и вызвать их угловыми –

+0

Начните с проверки правильного запроса, нажав F12 в своем браузере и просмотрев вкладку сети. Это будет сузить проблему либо с угловой генерацией, либо с маршрутизатором php. – Cerad

ответ

5

Вы должны получить доступ к данным из запроса. Если вы размещаете объект JSON как

{ 
    "foo": "bar" 
} 

действие вашего контроллера должно выглядеть примерно так:

public function postAction(Request $request) 
{ 
    $data = json_decode($request->getContent(), true); 
    $request->request->replace($data); 

    //echo below should output 'bar' 
    echo $request->request->get('foo'); 

    //return response 
    //.... 
} 

Более подробную информацию о том, что можно было бы найти here