2011-12-02 7 views
0

저는 책을 읽음으로써 zend 프레임 워크를 배우려고합니다. 지금까지는 모든 코드가 작동했지만 지금은 사용자 인증에 문제가 있습니다. 이 책은 행동 도우미와 교리 2의 엔티티 관리자를 통해이를 수행 할 것을 제안합니다. 여기 Doctrine 2 엔티티 관리자 객체에 비 객체 오류가 발생했습니다.

내가이

내 인증합니다 헬퍼 클래스에 사용하고 코드 ...

public function init() 
{   

    // Initialize the errors array 
    Zend_Layout::getMvcInstance()->getView()->errors = array(); 
    $auth = Zend_Auth::getInstance(); 
    $em = $this->getActionController()->getInvokeArg('bootstrap')->getResource('entityManager');  
    if ($auth->hasIdentity()) { 
    $identity = $auth->getIdentity(); 

    if (isset($identity)) {  
     $user = $em->getRepository('Entities\User')->findOneByEmail($identity); 
     Zend_Layout::getMvcInstance()->getView()->user = $user;     
    } 
    } 
} 

엔티티 저장소 기능 ...

public function findOneByEmail($email) 
{ 

$rsm = new ResultSetMapping; 

$rsm->addEntityResult('Entities\User', 'a'); 
$rsm->addFieldResult('a', 'id', 'id'); 
$rsm->addFieldResult('a', 'email', 'email'); 
$rsm->addFieldResult('a', 'fname', 'fname'); 

$query = $this->_em->createNativeQuery(
    'SELECT a.id, a.fname, a.email FROM users a 
    WHERE a.email = :email', 
    $rsm 
); 

$query->setParameter('email', $email); 
return $query->getResult();  

}

입니다 페이지 뷰에서 다음 코드를 사용하여 사용자가 로그인했는지 확인합니다.

<?php 
if($this->user){ 
    ?>Welcome back, <a href="/user/"><?php echo $this->user->fname; ?></a> &bull; <a href="/user/logout/">Logout</a><?php 
} ?> 

내가 로그인 할 때 if 조건이 충족되지만 사용자 이름이 인쇄되지 않습니다.

Notice: Trying to get property of non-object in C:\Program Files (x86)\Zend\Apache2\htdocs\dev.test.com\application\views\scripts\user\index.phtml on line 3 

이 사람이 나에게이 문제를 해결하는 데 도움을 줄 수 있습니다 :

여기에 오류 나는 그것을 얻을 메시지인가?

답변

1

나는 문제의 일부가 여기에 생각 : findOneByEmail 매개 변수 만 전체 신원 객체가 전달되는 등의 전자 메일 주소를 기대처럼

if (isset($identity)) {  
    $user = $em->getRepository('Entities\User')->findOneByEmail($identity); 
    Zend_Layout::getMvcInstance()->getView()->user = $user;     
} 

것 같습니다.

아마도 은 null 또는 false를 반환하므로 $view->user은 개체가 아니며 fname 속성이 없습니다.

findOneByEmail에서 $user = $em->getRepository('Entities\User')->findOneByEmail($identity->email);과 같은 것을해야한다고 생각합니다. 여기에서 $identity->email은 이메일 주소가 포함 된 속성입니다.

+0

두 번 확인했습니다. $ identity는 전자 메일 주소 인 문자열입니다. – liz

+0

그래,이 경우 함수의 반환 값에'var_export'를 시도하여'$ query-> getResult();'가 올바른 데이터를 반환하는지 확인하십시오. – drew010

+0

도우미의 $ user의 var_export : 배열 (0 => Entities \ User :: __ set_state (배열 ('id'=> 1, 'fname'=> 'Liz', 'lname'=> NULL, 'email' => '[email protected]', 'password'=> NULL, 'phone'=> NULL, 'active'=> NULL, 'role'=> NULL, 'created'=> NULL, 'updated'=> NULL, 'inactive'=> NULL,)),) – liz

관련 문제