반복적이고 긴 검증 코드를 다루는 데있어 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1419619

  •  07-07-2019
  •  | 
  •  

문제

나는 최근에 웹 프로그래밍을 시작했으며 유효성 검사 라이브러리를 사용하고 있지만 오류 메시지와 콜백 함수를 계산하지 않고 유효성 검사를위한 20-30 줄의 코드를 여전히 얻는 것에 놀랐습니다. Kohana MVC 프레임 워크를 사용하고 있으며 검증 코드를 단축 할 수있는 방법이 있는지 궁금합니다. 나는 다음을 생각하려고 노력했다

  1. 내 모델에 유효성 검사 코드를 넣습니다 (나와 같은 멍청한 사람).
  2. 항목을 검증하기위한 정말 작은 라이브러리 생성 (유효성 검사 클래스에 연결되는 내용이므로 사용자 등록, 편집 및 물건과 같은 반복 절차를 위해 라이브러리에 전화 할 수 있습니다).

아니면 더 좋고 효율적인 방법이 있습니까?

도움이 되었습니까?

해결책

모델에 검증을 포함시키는 작업을 적극 권장합니다. 일단 당신이 하나를 할 수 있으면, 당신이 만든 다른 사람들은 훨씬 쉬워 질 것입니다. 또한 해당 데이터를 저장하려는 여러 컨트롤러가있는 경우 유효성 검사를 재고 할 필요가 없습니다. Kohana 문서에는 검증 라이브러리와 ORM을 통합하기위한 몇 가지 예가 포함되어 있으므로 시작해야합니다.

다른 팁

유효성 검사 코드가 양식 init 메소드에있는 유효성 검사를 위해 zend_forms와 함께 zend_validate를 사용합니다. 내가해야 할 일은 각 요소에 대한 유효성 검사기 배열을 통과하는 것입니다.

$form->isValid($data);

... 데이터를 검증하기 위해 양식 외에.

유효성 검사 배열은 각 배열 항목을 Newline으로 분리하기 때문에 쉽게 30 줄 이상입니다. 그러나 각 요소에 대한 미세한 입자 검증 규칙을 정의하면 그렇게 할 것이라고 생각합니다.

그리고 Zend에서 새로운 유효성 검사기를 정의하는 것은 정말 쉽습니다.

편집 : 도메인 객체에 자체 유효성 검사를 포함 할 수있는 Zend 프레임 워크를 확장하는 프레임 워크를 발견했습니다. Xyster 프레임 워크라고 불리는 첫 번째 시도에서 작동 할 수 없었기 때문에 그 후에는 시도하지 않았습니다.

다음은 유효성 검사 코드를 처리하기위한 전략입니다. 나는 '검증 라이브러리'에 의해 이메일이 이메일인지 확인하고 전화 번호가 숫자이며 본질적으로 비즈니스 규칙이 아니라는 것을 의미합니다.

아이디어는 각 비즈니스 규칙 코드를 functor로 갖는 것입니다. PHP 인 경우 문자열을 사용하여 함수를 정의하는 것만으로도 얻을 수 있습니다. 다른 언어의 경우 전략 패턴을 사용해야 할 수도 있습니다. FUNCTOR (PHP에는 필요하지 않음)의 인터페이스를 정의하고 배열에 덤프하십시오.

배열을 통해 실행하여 성공, 오류 및 오류 코드를 버퍼로 반환합니다. 결국, 오류 버퍼를 검사하고 어떤 유효성 검사가 실패한 지 결정하십시오. 이를 사용하여보기를 사용자 정의하십시오.

여기 예입니다

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

결국, 당신은 각각 검증 프로세스로 채워진 결과 배열이 있으며, 어떤 것이 실패했는지, 그렇지 않은지 알 수 있습니다. 그런 다음 실패한 필드를 강조하는 것과 같이 추가 처리를 위해 클라이언트 측에 전달 될 수 있습니다. error_code a는 적절한 오류 메시지를 찾아서 적용되는 서식을 찾는 데 사용됩니다.

그래도 콜백이 무엇을 의미하는지 잘 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top