<?phpArchitecte
phpArchitecte [pi.aš.pí aršitekt] je prototyp frameworku s modelem komponent, který odděluje prezentační vrstvu. Framework není určen pro široké použítí, spíše se jedná o implementačně a architektonicky zajímavý problém, který řeším. Implementace frameworku je v PHP5.
Popis funkčnosti
Předpokládejme požadavek na domovskou stránku aplikace, framework ji zaregistruje a následně provede:
- načtení šablony home.page
- najde v šabloně komponenty a inicializuje je ve formě instancí
- vytvoří instanci třídy, která definuje chování komponent na stránce
- vykreslí komponenty do stránky, kterou později zobrazí
<?php
class Framework
{
public static function run()
{
// validate page request
self::request();
// compose name of page and class
$pageFile = PROJECT_PAGES . "/" . self::$page . __PAGE_EXT;
$classFile = PROJECT_CLASSES . "/" . self::$page . __PHP_EXT;
// include class
require_once $classFile;
// compile a page
$c = new TCompiler($pageFile);
// create an instance of page class
new self::$page($c->getComponents());
// render component into stream
foreach ($c->getComponents() as $com) {
$render = $com->render();
$compiled_id = $com->getCompiled();
TStream::replaceCompiledComponent($compiled_id, $render);
}
}
. ..
}
?>
Šablony
Šablony jsou soubory obsahující HTML kód, který je doplněn o jazyk komponent, který popisuje vizualní nebo nevizuální komponenty na stránce a definuje jejich vlastnosti.
Šablonu si můžeme představit třeba takto:
<:include file="head.page">
<h2>Contact form</h2>
<hr>
<com:TLabel id="answer">
<com:TForm>
Your name:
<com:TInput name="firstname" id="firstname">
Age:
<com:TInput name="age" id="age">
<com:TSubmitButton value="Send form">
<com:/TForm>
<br>
<a href="index.php?page=one">Jump to page one</a>
<:include file="tail.page">
Instance stránky
Každá šablona má stejnojmennou třídu, která definuje chování komponent na stránce. Instance této třídy má přístup ke všem komponentám, které byly inicializovány.
Třída definující chování stránky může vypadat takto:
<?php
package("gui.html.*");
class home extends TPage
{
public function run()
{
if (isset($_POST["firstname"])) {
$this->answer->text = "Thank you " . $_POST["firstname"] . "!";
if ($_POST["age"] < 15) {
$this->answer->text .= "you are kid!";
} else
$this->answer->text .= "<br>you are realy old!";
}
}
}
?>
Download
Ke stažení jsou zdrojové kódy.
juhanak.cz