使用angularjs提交symfony2表单

Seh*_*ael 5 javascript php forms symfony angularjs

我正在后端使用symfony2构建一个应用程序.我正在考虑在前端使用AngularJS,但我还是想使用symfony表单.我已经使用正确的模块和所有内容设置了表单,但是在实际提交数据时会出现问题.

问题

当Symfony呈现表单时,它会将输入'name'属性设置为数组,例如user[username],这是它在提交数据时希望接收数据的格式.我无法弄清楚如何让Angular以这种格式提交数据.这就是我所拥有的:

<body ng-app="formApp" ng-controller="formController">
{{ form_start(form, {'attr':{'id': 'registerForm', 'ng-submit':'processForm()'}}) }}

{{ form_row(form.username, {'attr':{'ng-model':'formData.username'}}) }}
{{ form_row(form.password.first, {'attr':{'ng-model':'formData.password'}}) }}
{{ form_row(form.password.second) }}
{% for address in form.userAddresses %}
        {{ form_row(address.postalCode, {'attr':{'ng-model':'formData.postalCode'}}) }}
{% endfor %}

<div><input type="submit" value="Save" /></div>
{{ form_end(form) }}
</body>
Run Code Online (Sandbox Code Playgroud)

和控制器:

function formController($scope, $http) {

$scope.formData = {};

$scope.processForm = function() {
    $http({
        method  : 'POST',
        url     : submit,
        data    : $.param($scope.formData), 
        headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
    })
        .success(function(data) {
            alert(data.message);
        });
};
}
Run Code Online (Sandbox Code Playgroud)

当我提交时,显然名称 - 值对使用formData变量,因此username=testuser而不是user[username]=testuser.

我尝试将formData变量设置为formData.user[username],但这根本不起作用.

那么有没有办法在提交时使用输入'name',或者做一些事情以便以正确的格式提交表单?任何帮助都会很棒!

akr*_*ymn 2

您可以在 $scope 函数中构建 symfony 期望的对象,您可以使用 ng-click 将其绑定到表单的提交。所以:

<input type="submit" value="Save" /></div>
Run Code Online (Sandbox Code Playgroud)

会成为

<input type="submit" value="Save" ng-click="submitForm()" /></div>
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您将在 $scope 对象上添加一个函数

$scope.submitForm = function() {
  var user = [];
  user['username'] = $scope.formData.username;
  //etc
};
Run Code Online (Sandbox Code Playgroud)

  • @akronymn 这是如何工作的:`var user = []; user['用户名'] = $scope.formData.用户名;`? `user` 是一个 `Array`,你尝试像使用 `Object` 一样使用它 (2认同)