我剛剛第一次將FOSUserBundle導入symfony2項目,並且在擴展用戶實體時發現了一個問題。我用prePersist和preUpdate生命週期回調添加了created_at和updated_at字段,但是這些方法沒有被讀取。擴展FOSUserBundle用戶實體時的生命週期回調問題
如果我在構造函數中爲這些字段設置了setter,那麼這些字段會被填充(但顯然這對於updated_at無法正常工作)。我添加的其他領域已按預期工作。
您是否需要以某種方式擴展UserListener以允許生命週期事件正常工作?
請在下面找到我的代碼,任何幫助或建議將不勝感激。
UserEntity:
namespace Acme\UserExtensionBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Acme\UserExtensionBundle\Entity\User
*
* @ORM\Table(name="acme_user")
* @ORM\Entity()
* @ORM\HasLifecycleCallbacks()
*/
class User extends BaseUser{
/**
* @var integer $id
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var datetime $created_at
* @ORM\Column(name="created_at", type="datetime")
*/
protected $created_at;
/**
* @var datetime $updated_at
* @ORM\Column(name="updated_at", type="datetime")
*/
protected $updated_at;
...
public function __construct() {
parent::__construct();
$this->created_at = new \DateTime;
$this->updated_at = new \DateTime;
}
/*
* @ORM\preUpdate
*/
public function setUpdatedTimestamp(){
$this->updated_at = new \DateTime();
}
...
Spottet另一個錯誤,因爲由於錯誤情況應該出現的錯誤不會出現。 setUpdatedTimestamp方法的註釋塊不是docblock。它以/ *開始,而不是由/ **開始。我想由於註解解析器不解析這個塊。 – room13 2012-05-21 11:32:22
好點,我已經建立了自己的用戶包,但毫無疑問,這是問題的原因。在擴展中也有趣的東西,我會給它一個。我在這裏是新的,所以我不能投票你的答案,但我已經給你打勾。 – Mark 2012-05-22 16:18:25
沒有問題的伴侶,但我強烈建議依靠FOSUserBundle而不是實現自己的。該軟件包由symfony專家創建,並且是用戶在symfony中處理的事實標準 – room13 2012-05-23 13:38:32