2013-04-13 82 views
1

FOSUserbundle記錄寄存器時間和登錄時間上FOSUserBundle

我想記錄諸如createdAt,UpdateAt,loginAt上的用戶表中,當用戶寄存器中的數據。

我在想什麼是我應該把這些繩子放在哪裏。

我可以找到類似的參考

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md

它說覆蓋/src/Acme/UserBundle/Controller/RegistrationController.php

class RegistrationController extends BaseController 
{ 
    public function registerAction() 
    { 
     $form = $this->container->get('fos_user.registration.form'); 
     $formHandler = $this->container->get('fos_user.registration.form.handler'); 
     $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled'); 

     $process = $formHandler->process($confirmationEnabled); 
     if ($process) { 
      $user = $form->getData(); 

      /***************************************************** 
      * Add new functionality (e.g. log the registration) * 
      *****************************************************/ 
      $this->container->get('logger')->info(
       sprintf('New user registration: %s', $user) 
      ); 

      if ($confirmationEnabled) { 
       $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail()); 
       $route = 'fos_user_registration_check_email'; 
      } else { 
       $this->authenticateUser($user); 
       $route = 'fos_user_registration_confirmed'; 
      } 

      $this->setFlash('fos_user_success', 'registration.flash.user_created'); 
      $url = $this->container->get('router')->generate($route); 

      return new RedirectResponse($url); 
     } 

     return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
      'form' => $form->createView(), 
     )); 

但我不弄清楚怎樣的方式你可以用表格數據插入數據

like

$post = $form->getData(); 
$post->setCreatedAt(new \DateTime()); 
$post->setUpdatedAt(new \DateTime()); 
$em = $this->getDoctrine()->getEntityManager(); 
$em->persist($post); 
$em->flush(); 

我是symfony2的新手。 我想我仍然碰到symfony2的基本邏輯。 謝謝你的回覆。

回答

4

我解決了這個問題。

我已經加入HasLifecycleCallbacks 和 兩個功能prePersist,更新前

中的Acme/UserBundle /實體/ user.php的

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
* 
* @ORM\HasLifecycleCallbacks 
* 
*/ 
class User extends BaseUser 
{ 

    /** 
    * @ORM\PrePersist() 
    * 
    */ 

    public function prePersist() 
    { 
     $this->createdAt = new \DateTime; 
     $this->updatedAt = new \DateTime; 
    } 

    /** 
    * Hook on pre-update operations 
    * @ORM\PreUpdate() 
    */ 
    public function preUpdate() 
    { 
     $this->updatedAt = new \DateTime; 
    } 

感謝您查看和幫助我。

1

如果要在數據庫中保存數據,請將User類擴展爲FOS\UserBundle\Entity\User類。之後,您將能夠添加其他實體字段。

看看這裏瞭解如何擴展該類:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md

+0

我擴展了FOS \ UserBundle \ Entity \ User並創建了createdAt,UpdateAt,loginAt列。 我可以從表單註冊中插入用戶行數據, 但我想要在用戶行註冊時自動插入createdAt。 – whitebear

1

您可以安裝StofDoctrineExtensionsBundle並使用時間戳功能。

然後,在你的用戶實體類,你可以添加:

/** 
* @ORM\Column(type="datetime") 
* @Gedmo\Timestampable(on="create") 
*/ 
protected $createdAt; 

/** 
* @ORM\Column(type="datetime", nullable=true) 
* @Gedmo\Timestampable(on="update") 
*/ 
protected $updatedAt; 

不要忘了在頂部加入use Gedmo\Mapping\Annotation as Gedmo;的註釋工作。

這正是你用prePersist和preUpdate手動完成的工作,但它保存了幾行代碼並保持整潔。