2011-08-07 35 views
2

我下面的Symfony2的形式處理:Symfony2 Forms:如何在持久化之前將數據添加到請求對象?

public function createAction() 
{ 
    $entity = new Node(); 
    $request = $this->getRequest(); 
    $form = $this->createForm(new NodeType(), $entity); 

    $form->bindRequest($request); 

    if ($form->isValid()) { 
     $em = $this->getDoctrine()->getEntityManager(); 
     $em->persist($entity); 

     $em->flush(); 

的問題是在「節點」實體有沒有被用戶填充其他一些領域,而是通過在控制器腳本過程。這些「系統生成」值也應該與表單中的「用戶生成」值一起保存。

我不知道如何將系統值添加到實體。

這是我OOP知識中的一個缺點,但我在文檔或在線找不到任何示例。謝謝!

回答

2

我認爲你需要添加一些的getXXX/setXXX方法來Node類(或往裏class'es代碼爲他們),所以你的代碼看起來像

$em = $this->getDoctrine()->getEntityManager(); 

$entity->setPropertyOne('some value of mine'); 
$entity->setCurrentUserId($this->get('security.context') 
          ->getToken()->getUser()->getId()); 
// another entity setters 

$em->persist($entity); 

不知道它會幫助你的情況,但我建議閱讀關於Doctrine 2事件here

我也強烈建議您閱讀本(非官方)Symfony2 book :)

+0

謝謝,我知道它像一個二傳手那樣簡單!和用戶示例+1! – Acyra

1

如果你想管理它的實體,而在控制器。如果你是伊辛陽明則只需添加這對YML文件

lifecycleCallbacks: 
prePersist: [ doPrePersist ] 

,並在實體如果您使用的註解然後在實體剛纔添加的註釋標籤只需添加這種方法

function doPrePersist() 
{ 
    $this->publish = true; 
    $this->isDeleted = false; 
} 

/** 
* @ORM\prePersist 
*/ 
function doPrePersist() 
{ 
    $this->publish = true; 
    $this->isDeleted = false; 
} 
相關問題