Zum Inhalt springen

Kickstarter erweitern um "Active Record Pattern"-Funktion

Erstellt am 2. April 2008 · 3 Antworten · letzte Antwort am 2. April 2008

Tags: PHP, Frage

dyne ·

Hallo

erstmal vorneweg für's Verständnis:

Active Record Pattern
Ein Entwurfsmuster für eine Klasse, deren Instanzen immer genau einen Datensatz einer Tabelle entsprechen.
Z.B.

<?
$user = new User(1); // Der Datensatz mit der id 1 aus der user-Tabelle ist jetzt durch das Objekt vertreten.
echo $user->name;
$user->name = 'Hans'; // Der neue Wert wird vorerst nur im Objekt zugeordnet.
$user->update(); // Änderungen werden in die Datenbank geschrieben
?>

Ich habe eine Dummyklasse geschrieben (tx_myext_item_arp) die für eine beliebige Tabelle einer beliebigen Extension stehen soll und die dieses Entwurfsmuster umsetzt. Außerdem unterstützt sie verzögerte Initialisierung, also es werden nur die Daten aus der DB abgefragt, die tatsächlich benutzt werden.

Jetzt würde ich gerne den kickstarter erweitern, so dass er bei den Optionen für eine Tabelle eine zusätzliche Option "[] Create ARP-Class for this table" anzeigt und bei Aktivierung eben auch eine solche Klasse schreibt.

Die ersten Zeilen der ARP-Klasse sehen etwa so aus:

<?
class tx_myext_item_arp{
		/* To be written by kickstarter */
		public $uid;
		private $_pid;
		private $_tstamp;
		private $_crdate;
		private $_cruser_id;
		private $_deleted;
		private $_hidden;
		private $_name;
		private $_descr;
		private $table = 'tx_myext_items';
		private $flist = 'uid,pid,tstamp,crdate,cruser_id,deleted,hidden,name,descr';
		const TABLE = 'tx_myext_items';
		const FLIST = 'uid,pid,tstamp,crdate,cruser_id,deleted,hidden,name,descr';
		/* Do not change below */
		
		private $farray;
// ...
}
?>

In den Kopf der ARP-Klasse muss der Kickstarter also den Namen der Tabelle und alle Felder eintragen. Außerdem muss die Klasse natürlich entsprechend benannt werden.

Ich würde jetzt also gerne eine Extension schreiben, die den Kickstarter so erweitert. Wie gehe ich am besten vor?

dyne ·

Kannst du vielleicht noch einmal konkreter werden?

Ich dachte zuerst an einen Hook im kickstarter. Ist einer vorhanden, den ich benutzen kann? Wird die Ext noch weiterentwickelt (letztes Update war Nikolaus 2006), so dass ich einen Hook beantragen kann?