Symfony Validator没有正确检查DateTime

时间:2017-02-27 15:26:27

标签: php json validation datetime symfony

我正在使用Validator来检查我的var。其中一个是对象SeminarDate,其中包含startDateendDate。我的想法是使用Symfony Validator检查日期。但是,它不起作用。例如:“+ 0200StackOverflow”是有效日期......

控制器中的部分操作

foreach($dataReq['date'] as $key_a => $a) {
            $SeminarDate = new SeminarDate;
            $SeminarDate->setStartDate(new \DateTime($a['startdate']));
            $SeminarDate->setEndDate(new \DateTime($a['enddate']));
            $SeminarDates[] = $SeminarDate;

            $errors = $validator->validate($SeminarDate);
            if(count($errors)>0){
                $errorString = (string) $errors;
                return new View($errorString);
            }
        } 

验证yml的一部分:

seminarDate:
            - Collection:
                fields:
                    startDate:
                        - Required:
                            - NotBlank:
                                message: 'startdate is required.'
                            - DateTime: ~

                    endDate:
                        - Required:
                            - DateTime: ~
                            - NotBlank:
                                message: 'endDate ist required.'

示例(将JSON文件发送到Controller):

"date" : [
    { "startdate": "+0200Stackoverflow",
      "enddate" : "+0200Stackoverlfow"
    }
],

如果你需要更多,请问。 感谢

2 个答案:

答案 0 :(得分:0)

您应该安装php intl扩展以便正常进行日期验证。

选中此https://symfony.com/doc/current/setup.html#checking-symfony-application-configuration-and-setup

你可以去这里 http://localhost:8000/config.php  看你是否拥有它,或者你的phpinfo。

答案 1 :(得分:0)

我这样做了,我只是创建了一个新的验证器,并在将它添加到我的Doctrine类之前检查字符串本身。

foreach($getData['date'] as $key => $value) {
            $validator = Validation::createValidator();
            if(!isset($value['startdate'])){
                return new View('startdate doesnt exist.');
            } elseif(!isset($value['enddate'])){
                return new View('enddate doesnt exist.');
            }
            foreach($value as $value1){
                $violations = $validator->validate($value1, array(
                    new NotBlank(),
                    new DateTime(),
                ));
                if (count($violations)>0) {
                    return new View('date isnt valid!');
                }
            }