Nachdem Wechsel kann es einige Stunden bis Tage dauern bis alle DNS-Server auf dem neuesten Stand sind und man beim Aufruf von www.sven-drieling.de auf dem neuen Server landet - dies betrifft auch die E-Mailadressen.
Einrichtung des Servers ist abgeschlossen. Nun werden die DNS-Einträge auf den neuen Server gesetzt.
]]>
Das Prinzip ist wie in Link.php nur diesmal steht das '§
'
in der Mitte des Attributes und dahinter folgt das gewünschte Format.
__get_format.php: $obj = new Model(); $obj->foo = 'aBcDeF " &'; echo 'raw : ', $obj->foo, "\n"; echo 'uppercase : ', $obj->foo§uppercase, "\n"; echo 'lowercase : ', $obj->foo§lowercase, "\n"; echo 'specialchars: ', $obj->foo§specialchars, "\n"; echo 'noquotes : ', $obj->foo§noquotes, "\n";
In __get($name)
wird mit preg_match()
der Name
und das Format extrahiert und daraufhin via switch($format)
die gewünschte Ausgabe zurückgegeben.
__get_format.php: public function __get($name) { // $obj->foo§uppercase if(preg_match('#^([^§]+)§([^§]+)$#', $name, $matches)) { $name = $matches[1]; $format = $matches[2]; $value = $this->_values[$name]; switch($format) { case 'lowercase' : return strtolower($value); break; case 'uppercase' : return strtoupper($value); break; case 'specialchars': return htmlspecialchars($value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); break; case 'noquotes' : return htmlspecialchars($value, ENT_NOQUOTES | ENT_HTML5, 'UTF-8'); break; default: throw new Exception("Unknown format '{$format}'."); break; } } else { return $this->_values[$name]; } }
Mit einem Callback wie im __get_format_callback.php
-Beispiel
wird das Ganze noch flexibler.
$obj->addGetFormat('reverse', function($value) {return strrev($value);}); echo 'reverse : ', $obj->foo§reverse, "\n";
Das $this->_formats
-Array enthält formatName
=> Callback
-Paare, wobei die Callbacks in diesem
Fall anonyme Funktionen sind, die in __get($name)
ausgewählt und ausgeführt werden.
public function __construct() { $this->addGetFormat('raw' , function($value) {return $value;}); $this->addGetFormat('lowercase' , function($value) {return strtolower($value);}); ... } public function addGetFormat($formatName, callable $callback) { $this->_formats[$formatName] = $callback; } public function __get($name) { // $obj->foo§uppercase if(preg_match('#^([^§]+)§([^§]+)$#', $name, $matches)) { $name = $matches[1]; $format = $matches[2]; } else { $format = 'raw'; } $value = $this->_values[$name]; return $this->_formats[$format]($value); }
Gespeichert werden sie als JSON, das macht es einfach verschiedene
Templates in einer Datei zu speichern und auch Sonderzeichen wie der
Zeilenumbruch werden automatisch von json_encode()
/json_decode()
verarbeitet.
Die im ydLinks-Prototyp fehlende Tests waren in diesem Entwicklungsschritt sehr zeitaufwendig, da ich so ständig selbst die Eingaben, das Speichern und die Kontrolle der richtigen Anzeige wiederholen musste.
svn checkout --revision 188 https://svn.sven-drieling.de/repos/trunk/yd/links/ yd-links-188]]>
Nehme erst einmal http://www.sven-drieling.de/diary/atom.xml
als Grundlage für den Atom-Feed der Bookmarks.
Hmm, aber für Links gibt es doch eine spezielle Variante... - später suchen.
Programmier... Läuft.
Ah, How to make a linkblog in Atom.
Anpassen...
http://www.sven-drieling.de/bookmarks/1
habe ich noch nicht implementiert und dieser Link ist im Gegensatz zum eigentlich verlinkten Inhalt nun sehr präsent... Also, erst mal wieder die vorige Version nehmen.
Ähnliches Spiel bei den Fehlermeldungen wie "500 Internal Server Error".
Da habe ich zunächst die Ausgabe als Atom-Feed mit einem Eintrag, der die Fehlermeldung enthält ausprobiert aber diese wird in Opera, Firefox nicht sinnvoll angezeigt und im Feedreader macht es IMHO wenig Sinn, dass dann die Fehlermeldungen als Einträge gespeichert werden. Daher werden die Fehlermeldungen nun als HTML-Seite ausgeliefert. Macht sich auch gut im Feedreader.
Bei Gelegenheit müsste ich mich mal wieder ausführlicher mit Atom- und RSS-Feeds beschäftigen.
svn checkout --revision 154 https://svn.sven-drieling.de/repos/trunk/yd/links/ yd-links-154]]>
Das Skript ist zunächst einmal in PHP ohne Framework geschrieben und dient so zusätzlich dazu darüber nachzudenken was ein Framework enthalten und wie es aufgebaut sein sollte. Weshalb diese 1. Version von ydlinks absichtlich chaotisch ist und verschiedene Ideenansätze enthält.
Statt einer REST-API probiere ich z.B. eine befehlsorientierte API aus, so entfällt bei den Formularen die Umleitung vom POST- zum GET-Request.
svn checkout --revision 147 https://svn.sven-drieling.de/repos/trunk/yd/links/ yd-links-147]]>