[英]submit a symfony2 form using angularjs
我正在后端使用symfony2構建應用程序。 我正在考慮在前端使用AngularJS,但我仍想使用symfony形式。 我已經使用正確的模塊和所有內容設置了表單,但是實際提交數據時會出現問題。
問題
當Symfony呈現表單時,它會將輸入的“名稱”屬性設置為一個數組,例如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>
和控制器:
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);
});
};
}
當我提交時,顯然,名稱/值對使用formData
變量,因此username=testuser
而不是user[username]=testuser
。
我試圖設置像formData.user[username]
這樣的formData變量,但這根本不起作用。
那么,有沒有一種方法可以在提交時使用輸入的“名稱”,或者采取某種措施使表單以正確的格式提交? 任何幫助將是巨大的!
您可以在$ scope函數中構建symfony期望的對象,該函數將使用ng-click綁定到表單的提交。 所以:
<input type="submit" value="Save" /></div>
會成為
<input type="submit" value="Save" ng-click="submitForm()" /></div>
在您的控制器中,您可以在$ scope對象上添加一個函數
$scope.submitForm = function() {
var user = [];
user['username'] = $scope.formData.username;
//etc
};
我認為您應該保持Angular表單邏輯。 您應該使用ng-model
綁定數據。 為此,您可以創建一個Twig表單主題,以將ng-model
屬性添加到您的輸入中,請看一下要點 。
然后可以將輸入值傳遞給控制器中的$ scope.data var,如下所示:
$scope.var = {};
您應該使用本文第 109行提供的功能序列化數據,或者如果使用jQuery,則使用jQuery.param()。
然后創建一個提交方法,如下所示:
$scope.submit = function(){
$http.post(
'http://www.myurl.com',
this.serializeData($scope.data),
{ headers: {
'Content-Type': 'application/x-www-form-urlencoded' //Fix for Symfony
}
})
.success(function(data) {
//
})
.error(function (data){
$log.error(data);
});
}
我使用服務器端代碼解決它。 在處理請求和驗證之前,我調用了我創建的以下函數來更改格式:
/**
* Format the request content with the form name
* @param Request $request
* @param $formName
* @param null $content
* @return Request
*/
public function formatRequestWithForm(Request $request, $formName, $content = null)
{
if ($content === null) {
$content = $request->getContent();
}
$contentArray = array($formName => json_decode($content, true));
$request->attributes->add($contentArray);
$request->request->add($contentArray);
return $request;
}
您可以使用{'data-ng-model':'formData [“ user [username]”]'}。 要發布formData,您應該通過jQuery.param()傳遞它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.