2009-12-11 8 views
0

Y at-il une meilleure façon de travailler avec ZF en utilisant les mappeurs, les objets de la vie réelle et les objets_table.classe-table-mapper design php et ZF

Voilà comment je le fais avec Zend Framework:

class User_DbTable extends Zend_DB_Table_Abstract{ 
     protected $_name = "user"; // name of the table 
} 

la classe utilisateur -> objet utilisateur:

class User{ 
    protected $_id; 
    protected $_name; 
    protected $_addresses; //list of OBJs 

    public function set_name($_name){ 
    $this->_name = $_name; 
    } 
    public function get_name(){ 
    return $this->_name; 
    } 
    public function set_adresses($_addresses){ 
    $this->_addresses = $_addresses; 
    } 
// and so on.... 
} 

cartographe:

class UserMapper{ 
    protected $userTBL; 

    public function __construct(){ 
    $this->userTBL = new User_DbTable(); 
    } 
    public function __fatchAll(){ 
    $select = $this->userTBL->select(); 
    foreach($this->userTBL->fetchAll($select) as $row){ 
     $user = new User(); // model 
     $user->set_name($row->name); 
     // gat all the addreses of this user with eg. AddressMapper() 
     $user->set_addresses($addresses); // array of object of address just like User 
     $users[] = $user; 
    } 
    return $users; 
    } 
} 

utilisation dans le contrôleur: liste d'actions:

$userMP = new UserMapper(); 
$this->view->users = $userMP->__fatchAll(); 

ou ajouter/enregistrer l'action:

$newUser = new User(); 
$newUser->set_name('somename'); 
$userMP = new UserMapper(); 
$userMP->save($newUser); 
+0

Vous pouvez utiliser tout type de codage que vous aimez - mais les underscores au milieu des noms de méthode se démarquer comme un mal de pouce à moi. Si vous allez écrire beaucoup avec ZF, je collerais sur ToCamelCase parce que toutes les bibliothèques, documentation, samples, etc suivent ça. – asgeo1

+1

voir quelques présentetions http://www.slideshare.net/weierophinney en particulier http://www.slideshare.net/weierophinney/architecting-your-models – SMka

Répondre

2

ZF vous permet d'étendre la classe Zend_Db_Table_Row, et dites à votre classe Zend_Db_Table d'utiliser toujours. De cette façon, vous pouvez accéder à toutes les fonctionnalités Zend_Db_Table_Row, tout en ajoutant votre propre logique sur le dessus.

Vous pouvez le faire comme ça

class User_DbTable extends Zend_DB_Table_Abstract{ 
     protected $_name = "user"; // name of the table 
     protected $_rowClass = "User"; // The name of your Zend_Db_Table_Row class 
} 

class User extends Zend_Db_Table_Row { 

    public function set_name($_name){ 
    $this->name = $_name; 
    } 
    public function get_name(){ 
    return $this->name; 
    } 
    public function set_adresses($_addresses){ 
    $this->addresses = $_addresses; 
    } 
// and so on.... 
} 

Vous pouvez voir plus sur Zend_Db_Table_Rowhere

+1

C'est un mauvais conseil. http://www.slideshare.net/weierophinney voir là - pourquoi – SMka