2009-10-26 82 views
1

我是新來的PHP和Zend框架,並填寫有關下列非常不確定:擴展[Namespace] _Model_ [Table]類。它安全嗎?

例如,我有兩個表:

表1:箱(ID,高度,寬度,長度,重量)
表2:標籤(ID,boxid,文本,位置)

labels.boxid - > box.id

(labels.boxid爲primary_key box.id一個foreign_key)

我爲兩個表都生成了兩個單獨的標準Zend_Db_Table_Abstract + Model + Mapper類,它們包含所有set,get,fetchAll,fetchList方法。

問題:是安全的盒子模型擴展到LabeledBox模型類是這樣的:

class NS_Model_LabeledBoxMapper extends NS_Model_BoxMapper { 
     public function fetchAll() 
     { 
      $resultSet = $this->getDbTable()->fetchAll(); 
      $entries = array(); 

      foreach ($resultSet as $row) { 
       $entry = new NS_Model_Box(); 
       ...setting box properties code... 

       //fetching and setting labels for the box 
       $labels = new NS_Model_Labels(); 

       $entry->setLabels(
        $labels->fetchList("boxid='" . $row->id . "'") 
        ); 
      } 

      $entries[] = $entry; 
     } 
    } 

讓我終於可以運行:與映射器類這樣沿着

class NS_Model_LabeledBox extends NS_Model_Box { 
    protected $_labels; 

    public function setLabels($objs) 
    { 
     $this->_labels=$objs; 
     return $this; 
    } 

    public function getLabels() 
    { 
     return $this->_labels; 
    } 

    public function getMapper() 
    { 
     if (null === $this->_mapper) { 
      $this->setMapper(new NS_Model_LabeledBoxMapper()); 
     } 
     return $this->_mapper; 
    } 

} 

$labeledbox = new NS_Model_LabeledBox(); 
$entries = $labeledbox->fetchAll(); 

foreach($entries as $entry) 
{ 
    echo $entry->getId(); 
    echo $entry->getWeight(); 
     foreach($entry->getLabels() as $lables) 
     { 
      echo $lables->getText(); 
     } 
} 

此代碼適合我。 我只是不想被留下來,如果有任何重大變化,可能會影響這個「技巧」(它仍然適用於OOP範例)的ZF的新版本。

+0

這不是一個真正的「竅門」。這只是面向對象,你在做什麼沒有錯。 – smack0007

+0

謝謝! 是的,它是純粹的面向對象,這就是爲什麼它被引用的「詭計」) 沒有那麼多框架,我一直在相當長的時間(生命週期)工作。我希望有人會指出他自己的經歷。 – forker

回答

1

你確實提出了一個關於碰到移動目標的好方法,到目前爲止,Zend Framework已經是這樣。我在ZF 1.7.x上開始了兩個不同的項目,並且由於ZF的變化,已經重寫了一些類。當然,這更多的是希望能夠與ZF的「穩定」版本保持同步,所以我並不需要。

Zend Framework當然是一個快速移動的框架,這是您在編寫代碼時需要考慮的事情,特別是因爲在2.0.x發佈時有關於打破向後兼容性的討論。