login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Abstract Classe Zend Framework Model Issue

Offline erm - 22/12/2011 12:38 (laatste wijziging 22/12/2011 12:39)
Avatar van ermLid Beste Forumleden,
Ik heb een abstracte classe Resources en een Classe Permissions.
De classe Resource bevat een instantie van Zend_Db.
Permissions Extends Resources dus.

Nu heb ik in het model twee verschillende tabellen gedefinieerd namelijk in de abstracte classe de table resources en in permissions table permissions.

In de classe resources zit een methode getResources.

Wanneer ik nu in de controller getResources laad wordt de attribuut $_name overschreven maar dit moet niet. Ik wil dat in de Class Resources en Permissions twee tabellen invidueel geladen worden niet worden overschreven.

Someone knows?
Zie Code.
Permissions.php


  1. class EnqueteCms_Model_Permisssion extends EnqueteCms_Model_Resources {
  2.  
  3. protected $_name = "permissions";
  4.  
  5.  
  6.  
  7.  
  8.  
  9. /**
  10. * Method to save a data to an database
  11. * @param array
  12. * @param int
  13. * @return void
  14. */
  15. public function savepermission($permission)
  16. {
  17. foreach($permission as $perm) {
  18. $this->insert($perm);
  19. }
  20.  
  21. }


En Resources.php
  1. abstract class EnqueteCms_Model_Resources extends Zend_Db_Table {
  2.  
  3. protected $_name="resources";
  4. public function getResources()
  5. {
  6. $row = $this->_db->fetchAll($this->_db->select()->from("resources"));
  7. return $row;
  8.  
  9. }
  10. ...
  11. }


Heeft iemand enig idee? Ik los het nu met een workarround op, maar het kan ook anders. Code Workarround:
  1. class EnqueteCms_Model_Resources extends Zend_Db_Table {
  2.  
  3. protected $_db;
  4.  
  5. public function __construct() {
  6. $this->_db = Zend_Registry::get('dbAdapter');
  7. }
  8.  
  9. /**
  10. * Method to get all the resources
  11. * @param string typeusers
  12. * @return array
  13. */
  14. public function getResources()
  15. {
  16. $row = $this->_db->fetchAll($this->_db->select()->from("resources"));
  17. return $row;
  18.  
  19. }
  20.  
  21.  
  22.  
  23. }


De attribuut moet dus niet worden overschreven.

2 antwoorden

Gesponsorde links
Offline Stijn - 24/12/2011 14:44
Avatar van Stijn PHP expert Dat zal nooit lukken want dan breek je de OOP regels. Je zal je workaround moeten gebruiken of een andere structuur moeten opzetten. Trouwens, het overerven van models is een slecht idee. Dat betekent dat tabellen van je database ook overerven van elkaar. Je moet die twee models van elkaar scheiden. Je kan in je Permission klasse een instantie variabele van de model Resources toevoegen.

  1. public class EnqueteCms_Model_Permisssion extends ....
  2. {
  3.  
  4. private $_resources = null;
  5.  
  6. public function setResources(EnqueteCms_Model_Resources $resources)
  7. {
  8. $this->_resources = $resources;
  9. }
  10.  
  11. public function getResources()
  12. {
  13. return ($this->_resources != null) ? $this->_resources->getResources() : null;
  14. }
  15.  
  16. ...
Offline erm - 27/12/2011 10:32
Avatar van erm Lid oke, dankjewel.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.215s