Platzhalter Callback¶
Mit dem Interface \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholderAccess
und dem Trait \Alvine\Application\Web\Presenter\Callback\Implementation\ReplacePlaceholder
kann ein View auf die Platzhalter eines Presenters zugreifen.
Der Callback muss als ersten Parameter den $content als Referenz übergeben und der zweite Parameter muss der Presenter sein.
function(string &$content, \Alvine\Application\Web\Presenter $presenter){
// Platzhalter ersetzen
return $this;
}
Der Callback wird in dem Objekt \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholder
gespeichert und dem Presenter übergeben.
Der Presenter hat in diesem Beispiel eine Methode getPlaceholder(string $key):string
die den Wert für den gefundenen Schlüssel zurück liefert.
In diesem Beispiel werden im Text diese Platzhalter placeholder{KEY}
gesucht.
$presenter=new Class($assembly) extends \Alvine\Application\Web\Presenter\Page implements \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholderAccess {
use \Alvine\Application\Web\Presenter\Callback\Implementation\ReplacePlaceholder;
/**
* liefert einen Platzhalter zurück
*
* @param string $key
* @return string
*/
public function getPlaceholder(string $key): string {
return "Ersetzung";
}
};
$callback = new \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholder(function (string &$content, \Alvine\Application\Web\Presenter $presenter) {
if(\preg_match_all('/(?<ph>placeholder\{(?<key>[^}]+)\})/ims', $content, $matches)) {
foreach($matches['key'] as $i=> $key) {
$content=\str_replace($matches['ph'][$i], $presenter->getPlaceholder($key), $content);
}
}
return $this;
});
$presenter->addReplaceCallback($callback);
Der View kann dann auf das Interface prüfen und die Callbacks nacheinander aufrufen
if($presenter instanceof \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholderAccess) {
foreach($presenter->getReplaceCallbacks() as $callback) {
$callback->execute($content, $presenter);
}
}
Platzhalter Callbacks von statischen Methoden¶
Hier wird die Methode replace
über den Trait ReplacePlaceholder
eingebunden
trait ReplacePlaceholder {
public static function replace(string &$content, \Alvine\Application\Web\Presenter $presenter): string {
// ersetzung
return $content;
}
}
diese Methode kann dann wie folgt als Callback defniert werden:
class MyClass extends \Alvine\Application\Web\Presenter\Page implements \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholderAccess{
use ReplacePlaceholder;
public funtion foo(){
$this->addReplaceCallback(new \Alvine\Application\Web\Presenter\Callback\ReplacePlaceholder([__CLASS__,'replace']));
return $this;
}
}