0

응용 프로그램의 로그인 부분에서 작업하는 동안 문제가 발생했습니다.Zend_Auth에서 stdClass 대신 도메인 모델 사용자 객체를 얻을 수 있습니까?

내 모델은 Active Record를 기반으로하며 Zend_Db_Table_Row 개체를 확장합니다. 사용자를 처리해야 할 때마다 확장 된 테이블 행인 User 객체를 통해이 작업을 수행하려고합니다. 그러나 Zend_Auth_Adapter_DbTable :: getResultRowObject()는 stdClass를 반환하고 Zend_Auth_Adapter_DbTable에 특정 Db_Table을 사용하도록 알리는 방법을 찾을 수 없습니다. 내가 지금까지 발견했습니다

내 세 가지 옵션 :

  1. 적절한 클래스 객체를 반환하는 사용자 정의 Zend_Auth_Adapter 쓰기 (사용 Zend_Db_Table 내부적으로).

  2. 인증 후 stdClass의 일부 읽기와 User 객체 쓰기를 수행합니다. 실제로 Zend_Db_Table을 사용하지 않고 Zend_Db_Table_Row 클래스를 만들 수 있습니까?

  3. Active Record에서 완전한 Domain Driven 개발로 이동하여 내 데이터 액세스를 사용자 개체와 분리합니다. 그런 다음 테이블 행 대신 stdClass를 사용하여 User 객체를 채우는 두 번째 매퍼를 작성합니다.

두 가지 질문 : 다음 중 어느 것을 권장합니까? 내가 누락 된 것이 있습니까?

나는 이것들 중 어떤 것을하는 것을 싫어하고 프레임 워크에서 명백한 것을 놓치고있는 것을 발견했다. 이 일을하는 '적절한'방법이 있는지 아는 사람 있습니까?

감사합니다, 샌더

답변

1

원하는대로하려면 적절한 방법이 없습니다. 여러분이 보여 주는 접근법은 모두 효과가 있습니다.

개인적으로 저는 Zend_Auth에 사용자 ID를 저장하는 것을 선호합니다. 모든 사용자 세부 정보가 포함 된 전체 개체를 저장하는 경우 사용자가 정보를 변경하면 동기화되지 않습니다.

프로젝트에서 저는 사용자에게 컨트롤러를 제공 한 컨트롤러 플러그인을 작성했습니다. 기본적으로 ID는 Zend_Auth에서 가져온 ID를 기반으로 사용자 객체를 작성했습니다. 또한 ID가없는 경우를 대비하여 익명 사용자 개체를 만들었습니다. 이것이 최선의 방법이라고 말하는 것은 아니지만 투명하고 효과적입니다.

0

particullar, 나는이 솔루션 번호 2를 사용 로그인에, 나는이 그래서, 나는, Zend_Auth을 래핑하는 사용자 정의 인증 개체가 :

public function login($user, $password) { 
    if(!($this->adapter instanceof Zend_Auth_Adapter_DbTable)) { 
     throw new Gecko_Auth_Exception("The Adapter is not valid or not initialized"); 
    } 

    $auth = Zend_Auth::getInstance(); 

    $this->adapter->setIdentity($user); 
    $this->adapter->setCredential($password); 

    $result = $auth->authenticate($this->adapter); 
    if($result->isValid()) { 
     $data = $this->adapter->getResultRowObject(null, $this->passwordColumn); 
     $userObject = new self::$userClass($data); 
     $auth->getStorage()->write($userObject); 
     return true; 
    } else { 
     return false; 
    } 
} 

그럼 내가 전화 할 수 있습니다 내 사용자 정의 Zend_Db_Table_Row 클래스를 매핑 할 수 있도록 Zend_Auth :: getInstance를 사용하여 사용자 정의 UserClass 객체를 검색합니다.

희망 하시겠습니까?