PHP: RuBisCO ORM -- Application- und Template-Klasse
Neu hinzugekommen die Application-Klasse für Applikationsname, Namensraum und später auch Autoren, Copyright, ... und die Template-Klasse für das Ersetzen der Platzhalter inklusive Einrückung.
Application
Application speichert direkt die Namen für die Applikation, den Namensraum, den Metadaten und besitzt ein Array für die Tabellen. In Table werden diese Daten in die Vorlagen eingesetzt.
class Application {
public $name;
public $namespace;
public $authors;
public $copyright;
public $license;
public $tables = array();
Template
Template ist in dieser ersten Version eine sehr einfache, zusammengehackte Klasse zum Ersetzen der Platzhalter in den Vorlagen. Hauptsächlich entstanden, um die Platzhalter sinnvoll einzurücken.
Das sieht innerhalb von replace() unübersichtlich aus. Im Wesentlichen wird dort folgendes gemacht:
- Suche nach eingerückten Zeilen mit Platzhalter
- Extrahiere die Einrückung
- Wandel den einzusetzenden Inhalt in die Zeilen eines Arrays um
- Füge diese Zeilen inklusive Einrückung in die Vorlage ein
public function replace($name, $content) {
// Replace with indent
$newTemplate = '';
foreach(\split("\n", \rtrim($this->template)) as $line) {
// {fieldDeclaration}
if(\preg_match("#^(\s*)\{$name\}\s*$#", $line, $matches)) {
$indent = $matches[1];
// Convert $content to array
$a = null;
if(\is_array($content)) {$a = $content;}
if(\is_string($content)){$a = \split("\n", rtrim($content));}
if(is_null($a)) {
$a = array($content);
echo "Warning: Not supported type\n"; // TODO
}
// Replace placeholder with content
foreach($a as $item) {
$newTemplate .= "{$indent}{$item}\n";
}
} else {
$newTemplate .= $line . "\n";
}// if(\preg_match("#^(\s*)\{$name\}\s*$#", $line, $matches)) {
}// foreach(\split("\n", $this->template) as $line) {
$this->template = $newTemplate;
// Replace without indent
$this->template = \str_replace('{' . $name . '}', $content, $this->template);
}// replace
Quelltext (MIT Lizenz)
Der komplette Quelltext von RuBisCO ORM liegt in Subversion: Heutige Revision 11, aktuelle Version.
