我遇到了几乎相同的问题,除了我使用了日期字段,它带有一个选项输入的小部件,分别用于日、月和年。
我将 bootstrapui 用于花哨的角度日期选择器。
Symfony 的表单帖子是一个多数组,看起来类似于:
form_name[field_name][day], form_name[field_name][month],form_name[field_name][year] 其中表单名称来自类型的 getName 函数。
基本上你必须将 Angular 的日期转换为这种格式:
//java script
var expiration = $filter('date')($scope.datePicker, 'yyyy/M/d').split('/');
$scope.data['form_name[expiration][month]'] = expiration[1];
$scope.data['form_name[expiration][day]'] = expiration[2];
$scope.data['form_name[expiration][year]'] = expiration[0];
//form type
public function buildForm(FormBuilderInterface $builder, array $options) {
parent::buildForm($builder, $options);
$builder
->add('expiration', 'date')
->add('save','submit');
}
public function getName() {
return 'form_name';
}
在 javascript 中,$scope.datePicker 是绑定到选择器的 ng-model(它存储 angular 创建的日期对象),而 $filter 是注入到控制器的 angular 服务。然后你可以发布它:
$http.post($scope.formUrl, $.param($scope.data), {headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}})
.then(function (response) {
//called async if form is valid
}, function (response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});