Angular将日期字符串发布到Symfony2 Form DateTime字段中.无效的值


Angular posted date string into Symfony2 Form DateTime field. Invalid value

我有一个用Symfony2 FormBuilder构建的表单。

部分字段定义为:

$builder->add('dateField','datetime',array('widget'=>'singletext'))

当我使用angular到$http。发送回内容字段中的值以以下格式返回:

"2015-07-31T23:00:00.000Z"

这个字段给了我一个无效的值err

有谁能建议如何使它工作吗?

我几乎有同样的问题,除了我使用的日期字段,它附带了一个选项输入分别为日,月和年的小部件。我使用bootstrapui来制作花哨的角度日期选择器。Symfony的表单post是一个多数组,看起来类似:form_name[field_name][日],form_name[field_name][月],form_name[field_name][年],其中表单名来自类型的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 $作用域中。datePicker是绑定到选择器(它存储angular创建的日期对象)的ng模型,而$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.
            });

我得到同样的问题,我使用了datetimetype

use Symfony'Component'Form'Extension'Core'Type'DateTimeType;

than在我的postAction中添加

$date = new 'DateTime( $request->request->get("date") ); $entity->setDate($date)

最后,在我的角形中,一个简单的input type="date"

(Date是一个DateTime)

/** * @var 'DateTime * * @ORM'Column(name="date", type="datetime", nullable=true) */ private $date;