2011-10-21 3 views
1

Zend Framework : Zend_Validate_Db_RecordExists 및 Zend_Validate_Db_NoRecordExists를 검사하여 데이터베이스 테이블의 열을 검사하여 양식의 값이 명명 된 열에 나타나는지 확인했습니다.Zend - 유효성 검사기를 사용하여 Zend_Form에서 사용자 이름 암호 조합을 확인할 수 있습니까?

동일한 행의 다른 열 값을 기준으로 행을 제외 할 수 있다는 것도 관찰했습니다.

암호가이 유효성 검사기를 사용하여 사용자 이름과 일치하는지 확인할 수 있습니까?

지금까지 내 양식에서 사용자가 올바른 사용자 이름과 올바른 비밀번호 (이 사용자 이름의 비밀번호는 필수적으로 아님)를 입력하면 양식에서 입력을 확인합니다. 분명히 로그인 양식이나 사용자 이름/토큰 활성화 양식의 경우 토큰 또는 비밀번호가 동일한 행의 사용자 이름과 일치해야합니다!

감사합니다.

$this->addElement('text', 'handle', array( 

    'label' => 'Username:', 

    'required' => true, 

    'filters' => array('StringTrim'), 

    'validators' => array( 

     array(

      'NotEmpty', true, array('messages' => 'You must enter your username.') 

     ), 

     array(

       'Db_RecordExists', 

       false, 

       array (

        'member_activation', 

        'member_username' 
        ) 

       ) 

     )   

    )); 

$this->addElement('text', 'validationCode', array( 

    'label' => 'Code:', 

    'required' => true, 

    'filters' => array('StringTrim'), 

    'validators' => array( 

     array(

      'NotEmpty', true, array('messages' => 'You must enter your validation code.') 

     ), 

     array(

       'Db_RecordExists', 

       false, 

       array (

        'member_activation', 

        'member_validationcode' 
        ) 

       ) 

     )   

    )); 
+0

로그인 양식입니까? 그렇다면 Zend_Auth와 Zend_Auth_Adapter_DbTable을 사용하십시오. –

+1

안녕하세요. 내가하려는 것은 실제로 계정을 활성화하기 위해 사용자 이름에 대한 토큰을 검증하는 양식입니다. 사용자가 계정을 만들고 이메일을 보낼 때 토큰을 만듭니다. 그들은 자신의 계정을 사용하기 위해 사용자 이름과 활성화 코드를 입력하기 위해이 양식으로 돌아갑니다. 토큰 필드에 유효성 검사를하지 않고 컨트롤러에 양식을 실행하고 폼에 접두어로 붙인 장식 메시지를 사용하여 유효성 검사를 실패하면 토큰 필드에서 유효성 검사기를 사용하여 오류 메시지를 표시 할 수 있습니다. 필드. 감사합니다. – 8bitjunkie

+1

사용자 레코드를 가져 와서 수동으로 토큰의 유효성을 검사하고 일치하지 않는 경우 폼에 오류를 추가하는 것이 더 효율적일 수 있습니다. Db_RecordExists를 사용하면 필요하지 않은 토큰 열을 인덱싱하지 않으면 비효율적 일 수 있습니다. 그렇지 않으면 아마도 사용자 정의 유효성 검사기를 만들 수 있습니다. – drew010

답변

2

인증을 Zend_Validate에 구형으로 만들 수 있습니까? 전혀?

해야할까요? 지옥 아니야.

그렇다면 우려되는 사항이 있습니다. Zend_Validate_Db_RecordExists 물건은 실제로 종류의 경계선이다. 그러나 그것은 편리하다.

하지만 일단 고려한 길을 따라 가면 실제로는 그렇지 않을 때 거의 모든 것이 유효성 검사가됩니다. ACL 검사와 같은 모든 종류의 일을 할 수 있습니다.

유효성 검사는 거의 항상 사물 형식과 관련되어야합니다. 데이터 지속성 및 ACL 시스템 또는 다른 어떤 것에 대한 의존성을 추가하는 것은 결합력을 증가시킬뿐입니다. 이렇게하면 코드를 테스트, 디버그 또는 변경하는 것이 더 어려워집니다.

유효성 검사에 Zend_Validate를 사용하십시오. 줄이 너무 길지 않도록하십시오. 이 정수가> = 0인지 확인하십시오. 미국 전화 번호가 10 자리 숫자인지 확인하십시오.

더 자세한 확인이 필요하고 지속성 계층을 파고 들며 비즈니스 논리에 관한 것이면 간단한 양식 유효성 검사에서 멀리 떨어져있는 것이 좋습니다.

+0

위대한 포인트. 감사합니다 timdev. – 8bitjunkie

0

Zend_Form에 유효성 검사를 수행하는 경우 도메인 논리 설계의 일부를 외부 리소스로 연결하므로 (도메인 기반 디자인의 관점에서 볼 때) 기본 프레임 워크에 종속적으로 만듭니다. 너의 어플리케이션.