Tweet

jacek.kromski@jabster.pl


Zend Framework: rekordy i obiekty tabel dla nierozbudowanej strony/serwisu www

Wpis na 1. poziomie, wysłany 25-02-2010 o 20:13

Od jakiegoś czasu zastanawiałem się ja zrobić Fabrykę dla modeli w moich wypocinach, ale zawsze wracałem do dopisywania kolejnych metod typu getProductsTable() w poprzedniej fabryce, i często tworzyłem też klasę dla tabeli. Wszystko ok jeśli klasy modeli się różnią między sobą, a w wielu przypadkach chciałem mieć tylko obiekt tabeli/modelu tylko po to by korzystać z metod typu: createRow, save itp.

Problem zostawiłem bo i czasu nie było, a nic do głowy mi nie przychodziło. Oczywiście do czasu olśnienia typu: KISS (Keep It Simple, Stupid), wyszła bardzo prosta klasa do tworzenia obiektów tabeli/modeli bez potrzeby definiowania dla każdego modelu oddzielnej klasy (o ile nie odbiega od standardu, u mnie to standard to klasa Vk_Db_Table).

Dzięki temu oszczędziłem sobie zbędnego tworzenia klas dla modeli, jeśli to jest zbędne, a jednocześnie mam wszystkie funkcjonalności Zend_Db_Table i Zend_Db_Table_Row dla utworzonych obiektów.

class Vk_ModelsCreator {
    
    static protected $models = array();
    
    /**
     * 
     * @param string $modelName name of the table in Db
     * @return Vk_Db_Table
     */
    static public function create($modelName) {
        if (!isset(self::$models[$modelName])) {
            $config = array(
                Vk_Db_Table::NAME => $modelName,
                Vk_Db_Table::PRIMARY => 'id',
                Vk_Db_Table::SEQUENCE => '"' . $modelName .'_id_seq"',
            );
            self::$models[$modelName] = new Vk_Db_Table($config);
        }
        return self::$models[$modelName];
    }
}

Vk_Db_Table dziedziczy z Zend_Db_Table_Abstract

samo użycie narzędzia odbywa się poprzez, np:


$productsModel = Vk_ModelsCreator::create('products');
$newRow = $productsModel->createRow();
....
$newRow->save();

ogólnie wypada włączyć jeszcze cache'owanie dla obiektów tabel/modeli poprzez: ZendDbTable::setDefaultMetadataCache();

Dodaj komentarz| IT Ogólne PHP Programowanie Zend Framework |