Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
j'aimerais savoir comment faire pour créer des classes personnalisées pour les "row" en étendant Zend_Db_Table_Row_Abstract à des classes personnalisées, mais je n'y arrive pas correctement.
Voici mon problème :
J'ai une classes faisant des opérations sur une table SQL "annonces" :
class Model_DbTable_Annonces extends Zend_Db_Table
{
protected $_name = 'annonces';
protected $_primary ='id_annonce';
//si on décommente ce code la méthode Model_Row_Annonce::createRow() échoue !!
//protected $_rowClass = 'Model_Row_Annonce';
}
class Model_Row_Annonce extends Zend_Db_Table_Row_Abstract{
}
Voici une code que j'appelle dans un controlleur :
//le code cidessous fonctionne lorsque
//protected $_rowClass = 'Model_Row_Annonce'; est mis en commentaire dans la classe Model_Dbtable_Annonces
//Sinon il ne fonctionne pas
$annonces = new Model_Dbtable_Annonces();
$annonce = $annonces->createRow();
$annonce->save();
l'erreur renvoyée est :
Fatal error: Call to a member function insert() on a non-object in ...\library\Zend\Db\Table\Row\Abstract.php on line 467
la ligne en question étant est : $primaryKey = $this->_getTable()->insert($data);
Du coup, il faudrait initialiser la propriété $_table dans ma classe personnalisée Model_Row_Annonce, mais après plusieurs essais infructueux, je ne sais plus comment faire.
Si quelqu'un peut m'expliquer comment étendre des classes de "row" correctement, je suis preneur.
Merci d'avance.
Hors ligne
ta classe Model_DbTable_Annonces doit hériter de Zend_Db_Table_Abstract et non Zend_Db_Table.
Hors ligne
Merci du conseil, j'ai changé l'extension, cependant mon problème persiste.
Voici ce que retourne :
$annonce = $annonces->createRow();
Zend_Debug::dump($annonce);
object(Model_Row_Annonce)#89 (8) {
["_data":protected] => array(0) {
}
["_cleanData":protected] => array(0) {
}
["_modifiedFields":protected] => array(0) {
}
["_table":protected] => NULL
["_connected":protected] => bool(true)
["_readOnly":protected] => bool(false)
["_tableClass":protected] => NULL
["_primary":protected] => NULL
}
L'erreur reste la même :
Fatal error: Call to a member function insert() on a non-object in ...\library\Zend\Db\Table\Row\Abstract.php on line 467
Hors ligne
Alors, j'ai trouvé, en fait j'avais essayé d'étendre et de redéfinir le contructeur :
function __construct(){
// parent::__construct() ;
/// ...
//
}
Cela faisait buguer a construction de l'objet, donc conclusion :
Ne pas essayer de redéfinir le constructeur (même en appelant parent::__contsruct() lorsque le parent est Zend_Db_Table_Row
Hors ligne
Pages: 1