2016-04-05 13 views
1

Eh, başlık her şeyi söylüyor. İyi çalışan bir giriş formum var. Ancak yapmam gereken, kullanıcı veritabanı kaydı değiştiğinde zaman damgasını depolayan bir alana ek olarak, kullanıcı başarıyla oturum açtığında zaman damgasını kaydetmek. Yani bunlar iki farklı alan. İstediğimi yapan bu cevabı here buldum. Ne yazık ki Symfony3 sınıfında ContainerAware sınıfı mevcut değil, bu yüzden EntityManager örneğini İşleyicime nasıl alacağımı bilmiyorum. Eminim ki, basit bir çözüm var, ama bunu bulamıyorum.Symfony3 kaydetme oturum açma Kimlik doğrulama başarısından sonra veritabanında zaman damgası

Mintguo'dan ipucu ile bir adım daha ilerideyim. İşte şimdiye kadar benim kodudur:

use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; 
use Symfony\Component\DependencyInjection\ContainerAwareTrait; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; 
use Symfony\Component\HttpFoundation\RedirectResponse; 

class AuthenticationHandler implements AuthenticationSuccessHandlerInterface{ 

use ContainerAwareTrait; 

/** 
* {@inheritDoc} 
* @see \Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface::onAuthenticationSuccess() 
*/ 
public function onAuthenticationSuccess(Request $request, TokenInterface $token) { 
    $token->getUser()->setAnmeldat(new \DateTime("now")); 
    $this->container->get('doctrine')->getEntityManager()->flush(); 

    return new RedirectResponse($this->container->get('router')->generate('/auth/bnme')); 
} 

} 

Ama giriş yapmaya çalıştığınızda Symfony'nin bir özel durum atar: Hata: Nesne olmayan üye işlev, get() için arayın. Burada sorun nedir?

+0

ama soru nedir? Timestamp değerini girişte depolamak için? Sadece Varlığı düzenleyin ve tabloyu yeniden oluşturun, bu yüzden alanı var ve girişte doldurun ... Burada bir komplikasyon nedir? – Farside

+0

Bunun için iki farklı veritabanı alanı kullanmalıyım. Kayıtta bir değişiklik için bir alan ve giriş zaman damgası – Raistlin

+0

Raistlin için iyi bir giriş, iyi girdi, sadece bu ek bilgiyi sorgunun kendisine koy, daha spesifik ol. Teşekkür ederim. – Farside

cevap

2

Kullanım ContainerAwareTrait yerine


ContainerAwareTrait kullanmak için, services.yml dosyasında bir tanımını yapmak gerekir.

Create Service implementing ContainerAwareInterface

+0

İpucu için teşekkürler. Denedim ama sonra bir istisna var: Hata: Bir nesne olmayan bir nesne üzerinde get() işlevine çağırın. Yukarıdaki soruya kodu göndereceğim – Raistlin