【问题标题】:Angular posted date string into Symfony2 Form DateTime field. Invalid valueAngular 将日期字符串发布到 Symfony2 Form DateTime 字段中。无效值
【发布时间】:2026-02-05 00:05:01
【问题描述】:

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

部分字段定义为:

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

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

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

并且该字段给了我一个无效值错误。

谁能建议如何进行这项工作?

【问题讨论】:

标签: php angularjs symfony datetime iso8601


【解决方案1】:

我遇到了几乎相同的问题,除了我使用了日期字段,它带有一个选项输入的小部件,分别用于日、月和年。 我将 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.
            });

【讨论】:

    【解决方案2】:

    我得到了同样的问题,我使用了 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;

    【讨论】: