2012-09-25 5 views
0

ZF 1.11을 사용 중이고 Zend_Filter_Input이 아닌 Zend_Form의 유효성을 검사하고 싶습니다. 기본 유효성 검사를 성공적으로 설정했지만 오늘 신용 카드 만료일을 프로세서에 보내기 전에 사전 유효성을 검사하여 오늘/월보다 커야합니다.Zend_Filter_Input을 사용하여 날짜 확인

이것이 가능합니까? 특정 범위의 숫자로 월/년 필드의 유효성을 검사하는 것 이외에 their docs에 대한 특정 날짜 유효성 검사를 보지 못했습니다.

편집 : 그래서 내가 다른 유효성에 대해 살펴 봤 듯이 새로운 유효성 검사 클래스를 만들지 않고 (또는 확장/기존 구현을 사용하지 않고)이 작업을 수행하려고합니다.

+0

가능한 복제본 http://stackoverflow.com/questions/2232949/date-validator-that-validates-if-the-date-is-great-to-today-with –

+1

@DiegoPaladino 예, 나는 그 질문을 보았고, 나는 Zend에 그러한 내장 함수가 있는지 알고 싶기 때문에 적절하게 편집했습니다. –

답변

2

일반적으로 사용자 정의 유효성 검사기를 작성하는 것이 좋습니다. 제 생각에는 ZF에서 이러한 경우를 처리하는 가장 깨끗한 방법입니다.

본인이 알고있는 것처럼 Date 유효성 검사기는 날짜의 정식 유효성 만 검사하지만 두 날짜는 비교할 수 없습니다. 마음에 제한이 유일한 젠드 프레임 워크에 내장 된 사용하기로 그러나, 나는이 초과] 유효성 검사기를 사용하여 다소 해키 솔루션을 내놓았다 유효성 검사기 : 이전 달의 년에서 정수를 만들

<?php 
$year = 2012; 
$month = 1; 
$inputDatePast = intval(sprintf('%4d%02d', $year, $month)); //201201 

$year = 2016; // if you read this after september 2016: add a few more years here ;) 
$month = 9; 
$inputDateFuture = intval(sprintf('%4d%02d', $year, $month)); //201609 

$prevMonth = intval(date('Ym', mktime(12, 0, 0, date('n')-1, 1, date('Y')))); 

$validator = new Zend_Validate_GreaterThan($prevMonth); 
$validator->isValid($inputDatePast); // false 
$validator->isValid($inputDateFuture); // true 
?> 

그래서 아이디어가와 주어진 연도와 월이이 값보다 큰지 비교하십시오. 이 정수는 해당 연도에 대해 4 자리수로 생성되고 그 앞에 2 자리수 (선행 0이 중요 함)가 작성됩니다.

예를 들어 2012 년 9 월은 201209입니다. 사용자가 2011 년 10 월을 입력하면 201109가 201209보다 작아서 false로 평가됩니다. 반면에 사용자가 2014 년 1 월을 입력하면 이전 날짜보다 큰 201401이됩니다.

이것은 테스트되지 않은 스케치이며 더 많은 고려와 검증이 필요할 수 있습니다.

+0

알겠습니다. 사용자 정의 유효성 검사기를 작성하는 것이 더 쉬워 보일 수 있으므로 그렇게해야 할 것입니다. 그래도 고마워! –