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

时间:2015-08-15 12:51:31

标签: php angularjs symfony datetime iso8601

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

某些字段定义为:

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

当我使用angular to $ http.post返回内容时,字段中的值以下列格式返回:

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

该字段给我一个无效的值错误。

任何人都可以建议如何使这项工作?

2 个答案:

答案 0 :(得分:0)

我有几乎相同的问题,除了我使用的日期字段附带一个选项输入的小部件,分别为日,月和年。 我使用bootstrapui为花式角度datepicker。 Symfony的表单帖子是一个多数组,看起来类似于: form_name [field_name] [day],form_name [field_name] [month],form_name [field_name] [year]其中表单名称来自类型的getName函数。 基本上你必须将角度的日期转换为这种格式:

//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模型(存储日期对象angular created)和$ filter是注入控制器的角度服务。然后你可以发布它:

$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.
            });

答案 1 :(得分:0)

我得到了相同的概率,我使用了datetimetype

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

比我在postAction中添加的

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

最后,以我的角度形式一个简单的input type="date"

(日期是日期时间顺便说一句)

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