2017-02-27 11 views
1

私はvarをチェックするためにValidatorを使用しています。私のそれらの1つは、startDateendDateを含むオブジェクトSeminarDateです。私の考えは、Symfony Validatorで日付をチェックすることでした。しかし、それは動作しません。例として: "+ 0200StackOverflow" である有効な日付...コントローラ内のアクションのSymfony ValidatorはDateTimeを正しくチェックしません

一部

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ファイル):

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

もっと必要な場合は質問してください。 ありがとう

+1

それは、入力パラメータを解釈する 'DateTime'クラスではありません。これは有効です: 'new DateTime( 'now');' http://php.net/manual/de/datetime.construct.php – JustOnUnderMillions

+0

クリア....ありがとう.... –

+0

'印刷日( 'Ymd H:is '、strtotime(' + 0200Stackoverflow '));#結果1970-01-01 01:0000'はここで何が起こるかです。 DateTimeから有効な日付を取得しますが、それはまったく有効ではありません。 – JustOnUnderMillions

答えて

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!'); 
       } 
      } 
関連する問題