[Ad] _Model_ [Tablo] sınıflarını genişletme.

1 Cevap php

Ben php ve Zend Framework için yeni ve aşağıdaki hakkında çok belirsiz doldurun:

Örneğin, ben iki tablo var:

table1: box(id, height, width, length, weight)
table2: labels(id, boxid, text, position)

labels.boxid -> box.id

(Labels.boxid primary_key box.id için foreign_key olan)

Ben tüm set içeren iki tablo için iki ayrı standart Zend_Db_Table_Abstract + Model + Mapper sınıfları, olsun, fetchAll, fetchList yöntemleri elde ettik.

Soru: Böyle LabeledBox Model sınıflara Kutu Modeli uzatmak için güvenlidir:

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;
     }


}

Böyle Mapper sınıfları ile birlikte:

  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;
        }
  }

i nihayet çalıştırmak böylece:

$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();
       }
}

This code ran fine for me. I just don't want to be left behind if there comes new release of ZF with any significant changes that can possible affect this "trick" (it still applies to OOP paradigm).

Bu konuda herhangi bir önleyici (veya değil) Yorumlarınız için şimdiden teşekkür ederiz.

1 Cevap

Eğer bir hareketli hedef vurma konusunda iyi bir noktaya getirmek yapmak, ve şimdiye kadar Zend Framework olduğunu olmuştur. Ben ZF 1.7.x iki farklı projeler başladı ve zaten ZF değişiklikler nedeniyle bazı sınıfları yeniden yazdım. Tabii ki, up-to-date ZF "kararlı" sürüm ile kalmak arzusu daha oldu, bu yüzden gerçekten yoktu.

Zend Framework kesinlikle hızlı hareket eden bir çerçevedir ve bu 2.0.x bırakıldığında geriye doğru uyumluluk kırılma tartışma var, özellikle bu yana, size kod yazmak olarak dikkate almak gereken bir şeydir.