Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Hello,
je travaille actuellement sur un projet MVC et je me posais une question concernant la conception des classes modèles.
ok prenons un exemple:
j'ai une classe Annonce avec les bons paramètres qui représente ma table annonce dans ma DB.
class Annonce extends Zend_Db_Table_Abstract { ...
Je souhaiterais personnaliser le constructeur, or si je lui passe un tableau cela pose pb avec le constructeur de la classe Zend_Db_Table_Abstract.
Par exemple je souhaiterais avoir
class Annonce extends Zend_Db_Table_Abstract { public function __construct($opt = array()){ } ...
je suis donc obligé de passer par une fonction qui va initialiser ma classe, mais ce n'est pas vraiment son rôle.
Vous me suivez ?
Comment initialiser ma classe Annonce avec un tableau sans rentrer en conflit avec la classe parente ?
Je peux bien sur passer des autres variables type int ou string mais pas array, du fait de la déclaration de la classe Zend_Db_Table_Abstract.
Dernière modification par bucheron (09-03-2009 13:54:26)
Hors ligne
Hello,
Il faut utiliser init :
class Annonce extends Zend_Db_Table_Abstract { public function init($opt = array()){ } ...
A+
Dernière modification par mikaelkael (06-03-2009 17:44:11)
Hors ligne
hmm pas vraiment, car init() est appelé par le constructeur... Il faudrait que tu appeler le constructeur parent dans ton constructeur
parent::__construct();
Hors ligne
il prend déjà un tableau de config en argument
class Annonce extends Zend_Db_Table_Abstract { public function __construct($config = array(), $opt = array()){ } ...
et lorsque tu l'instancie tu l'appelle soit avec une conf soit avec une conf et ton tableau, soit avec ton tableau mais alors tu dois lui passer null ou array en premier argument
j'ai moi utilisé directement le tableau config
class Annonce extends Zend_Db_Table_Abstract { const MYOPTION = "ma super option" public function __construct($config = array()){ parent::__construct($config); foreach ($config as $key => $value) { switch ($key) { case self::MYOPTION : $this->_setMyOption($value); break; default: // ignore unrecognized configuration directive break; } } } ...
du coup je peux ajouter toutes les options que je veux il suffit de ne pas utiliser le même non qu'une déjà existante
const ADAPTER = 'db'; const SCHEMA = 'schema'; const NAME = 'name'; const PRIMARY = 'primary'; const COLS = 'cols'; const METADATA = 'metadata'; const METADATA_CACHE = 'metadataCache'; const ROW_CLASS = 'rowClass'; const ROWSET_CLASS = 'rowsetClass'; const REFERENCE_MAP = 'referenceMap'; const DEPENDENT_TABLES = 'dependentTables'; const SEQUENCE = 'sequence';
ZF est open source alors n'hésitez pas à ouvrir pour voir
A+JYT
Dernière modification par sekaijin (06-03-2009 18:15:01)
Hors ligne
Hello,
Il est grand temps que je me couche
A+
Hors ligne
merci pour ces éclaircissements.
Hors ligne
Petite question:
je me suis aperçu que si je mettais l'appel à la classe parente à la fin du constructeur cela me génère l'erreur suivante:
Fatal error: Call to a member function describeTable() on a non-object in C:\wamp\www\ZendSVN\Zend\Db\Table\Abstract.php on line 727
public function __construct($config = array()){ // Code... parent::__construct($config); }
alors que le code ci dessous fonctionne.
public function __construct($config = array()){ parent::__construct($config); // Code... }
Savez vous pouquoi ?
Hors ligne
c'est que dans ton code placé avant tu fait appel à est élément de l'objet courant qui ne sont pas encore initialisé
apparemment tu dois faire appel à l'objet DB qui n'est pas encore attacher à l'objet courant
A+JYT
Hors ligne
Pages: 1