2013-05-03 147 views
0

我在一個項目上使用Zend Framework 2和學說工作2擴展學說2個實體

我有維護數據庫以下過程:

  1. 我寫XML映射文件我的實體
  2. 我生成使用該命令的實體「ORM:生成實體」
  3. 我生成使用下面的命令數據庫「ORM:架構工具:更新--force」

我想用自定義業務代碼豐富生成的實體:我可以簡單地編輯生成的實體,但這意味着在每個新的實體代中丟失我的自定義代碼,我在尋找更好的工作流程。

基本上,這是我嘩嘩是可以做到的:

生成的實體:

namespace My\Base\Entity; 

class Cart 
{ 
    private $quantity; 

    public function setQuantity($quantity) 
    { 
     $this->quantity = $quantity; 

     return $this; 
    } 

    public function getQuantity() 
    { 
     return $this->quantity; 
    } 
} 

富集實體:

namespace My\Entity; 

class Cart extends \My\Base\Entity\Cart 
{ 
    public function setQuantity($quantity) 
    { 
     $quantity = filter_var(
      $quantity, 
      \FILTER_VALIDATE_INT, array('min_range' => 1) 
     ); 

     if ($quantity === false) { 
      throw new \InvalidArgumentException(
       'Quantity should be an integer higher than 0' 
      ); 
     } else { 
      return parent::setQuantity($quantity); 
     } 
    } 
} 

這是行不通的,因爲Doctrine期望\ My \ Entity \ Cart本身就是一個實體(儘管它只是一個擴展基礎實體)。

有什麼辦法來實現類似的東西?

回答

0

不幸的是,沒有。 Doctrine中的代碼生成功能是作爲「三等公民」提供的,這意味着您不應該依賴它。對於實體的初始骨架生成來說很好,但在此之後,您應該手動編輯它們。

儘管在大多數情況下是,但實體生成器足夠聰明,可以在您的實體中找出差異,如果您修改該架構,並且它只會添加正確的方法。它不會完全覆蓋您的實體。它也永遠不會拿起財產刪除。

我建議試着讓實體生成器做它的工作,然後與您選擇的版本控制軟件進行比較,看它是否做得正確。

0

在我看來,這取決於你想達到什麼。

在描述的代碼中,我看到類似簡單驗證的內容。

我伸出我的實體類功能getInputFilter(),在那裏我保持規則進行驗證單個記錄。

public function getInputFilter() 
{ 
    if (!$this->inputFilter) { 
     $inputFilter = new InputFilter(); 

     $factory = new InputFactory(); 

     $inputFilter->add($factory->createInput(array(
      'name' => 'id', 
      'required' => true, 
      'filters' => array(
       array('name' => 'Int'), 
      ), 
     ))); 

     // [...] 

     $this->inputFilter = $inputFilter; 
    } 

    return $this->inputFilter; 
} 

請檢查下面的鏈接查看完整的代碼:https://github.com/evolic/zf2-tutorial/blob/v0.4.2/module/Album/src/Album/Entity/Song.php

其他方法,如檢索所有記錄或單一個我把模型類:(/模塊/專輯/ src目錄/專輯/型號/歌曲。PHP)

控制器類都可以在這裏找到:(/module/Album/src/Album/Controller/SongController.php)

整個代碼,可以發現:https://github.com/evolic/zf2-tutorial/blob/v0.4.2/

我不產生實體基於數據庫。我自己創造它們。

我希望能幫到你。