2017-02-17 7 views
0

私はloginctionのためにリスナを構築し、ユーザが正常にログインしたときにログイン数と最後のログイン日をデータベースに更新します。symfony 3ログインリスナーのユーザリポジトリ

は私が成功したユーザの詳細情報を取得するが、それらにアクセスすることはできませんし、データベース

のsrc/AppBundle /リスナ/ SecurityListener.phpを更新することはできません。

namespace AppBundle\Listener; 
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; 
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; 
#use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine; 
use Doctrine\ORM\EntityManager; 

class SecurityListener 
{ 
    private $tokenStorage; 

    public function __construct(TokenStorage $tokenStorage, EntityManager $doctrine) 
    { 

    } 

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
    { 
    if ($event->getAuthenticationToken()->isAuthenticated()) { 
     $user = $event->getAuthenticationToken()->getUser(); 
      var_dump($user->id); 
    } 

    /** 
    * Update lastLogin and loginCount for user in database 
    */ 

    $em = $this->getDoctrine()->getManager(); 
     $user = $em->getRepository('AppBundle:User')->find($user->id); 

     if(!$user) 
     { 
      throw $this->createNotFoundException(
       'User could not be found for id '. $user->id 
      ); 
     } 

     $user->setLastLogin(date()); 
     $user->setLoginCount($user->loginCount +1); 
     $em->flush; 


    } 

} 

エラー:

Error: Cannot access private property AppBundle\Entity\User::$id 

答えて

0

エンティティのプロパティは通常はプライベートですが、常にgetterメソッドを使用できます。

この例に類似してコード更新してください:私の例が失敗した場合にも、getID()と呼ばれる方法を試すことができます

throw $this->createNotFoundException(
    'User could not be found for id '. $user->getId() 
); 

を。

+0

私は、ユーザーエンティティでメソッドgetId()を持っています。それはうまくいきません。エラー:通知:未定義のプロパティ:AppBundle \ Entity \ User :: $ getId'が表示されます。私はここに何か小さな誤解があると仮定しています... – Diamonte

+0

この通知を生成したコードを表示してください –

+0

申し訳ありません、$ user-> getId()で動作します。そのエラーを返しました...あなたの答えは固定されていましたので、欲しいデータを取得するにはゲッターメソッドを使用しなければなりませんでした – Diamonte