2011-08-17 6 views
0

Nous construisons un système de paiement en ligne en utilisant Zend Framework et nous essayons de le concevoir pour faciliter l'ajout de nouveaux systèmes de paiement. Actuellement, nous avons une implémentation pour PayPal, mais peut-être que nous voulons ajouter d'autres fournisseurs plus tard aussi.Extension de classes qui s'étendent Zend_Db_Table_Row_Abstract

Nous avons un objet de paiement qui étend Zend_Db_Table_Row_Abstract et un objet Payments qui étend Zend_Db_Table_Abstract. L'objet Paiement contient désormais des données spécifiques à PayPal dans sa ligne que nous souhaitons déplacer vers une autre table spécifique à PayPal. Cela nous permet d'avoir des données générales pour les paiements dans la table des paiements et les données spécifiques du fournisseur de paiement dans une autre.

Maintenant, nous avons essayé de faire un paiement de classe PayPalPayment prolongeant et un PayPalPayments de classe prolongeant Zend_Db_Table_Abstract. PayPalPayments fait référence à notre nouvelle table de base de données et au nouvel objet PayPalPayment. Ce que nous voulons faire maintenant est:

$ppp = new PayPalPayments(); 
$p = $ppp->createRow(); 
//set a paypal specific property. setToken is defined in PayPalPayment 
$p->setToken('lol'); 
//set a Payment general property. setStatus is defined in Payment 
$p->setStatus('paid'); 
//write to database 
$p->save(); 

Cependant, nous ne pouvons pas obtenir ce travail depuis le createRow ne retournera une ligne avec les colonnes dans la table PayPalPayment. Donc, cela donnerait l'erreur:

Specified column "pay_status" is not in the row 

trouvé certaines choses sur les relations dans la documentation de Zend Framework, mais ce n'est pas vraiment comment nous voulons le faire. Quelqu'un a déjà essayé ça?

Cordialement, Lars

Répondre

1

Est-ce que vous déclarez dans class PayPalPayments que la valeur par défaut $_rowClass = 'PayPalPayment'?

+0

Oui, nous l'avons fait. Le problème est que si nous faisons: $ p = new PayPalPayments(); $ payment = $ p-> createRow(); Le paiement $ ne reconnaît pas les colonnes de la table Paiements, mais uniquement les colonnes de notre nouvelle table paypal_payments. Ainsi, lorsque nous essayons de définir une valeur à une propriété à partir de la table des paiements, elle donne l'erreur que la colonne ne se trouve pas dans la ligne. – Lars

Questions connexes