Un cadre d'application Web simple mais évolutif.
Un exemple simple:
<?php
require_once 'Phapp.php';
class Hello extends PhappView
{
public function response()
{
return 'Hello World.';
}
}
$app = new Phapp();
echo $app->process( 'Hello' );
Trouvez ceci et des exemples plus complexes dans la branche des échantillons.
L'idée est de définir un ensemble d'objets de vue qui sont traités par l'objet d'application principal.
Chaque objet View hérite de PhappView qui a deux méthodes principales que vous devez écraser. Le premier est request ():
public function request()
{
if( !$_REQUEST['order_number'] )
return 'Home';
return null;
}
Le but de cette méthode est de gérer la demande et, si nécessaire, de renvoyer un nom d'une autre vue qui devrait prendre le relais.
La première vue qui renvoie NULL obtiendra sa méthode de réponse () appelée à répondre à la demande:
public function response()
{
return '<h1>Hello</h1>';
}
Voici un petit graphique qui montre comment tout fonctionne ensemble:
+----------------------------+
| Name of a PhappView object | <-------------------------+
+----------------------------+ |
| |
| |
+-- Phapp ------|-------+ |
| | | |
| V | |
| +------------------------+ +-- PhappView ---------+ |
| | Construct object | ------> | | |
| +------------------------+ | Object derived | |
| | | | from PhappView | |
| V | | | |
| +------------------------+ +-- request() ---------+ |
| | Call request() on | | | |
| | that object | ------> | Determine if | |
| +------------------------+ | this object | |
| | | can handle | |
| +------------------------+ yes? | this request | no? |
| | request() returned | <------ | | -----+
| | null | +-- response() --------+
| | so call response() | ------> | |
| | to get the output | <------ | Generate output for |
| +------------------------+ html | this request |
| | | | |
+---------------|-------+ +----------------------+
|
V
+----------+
| Web page |
+----------+
Le phapp est très minimal et très petit. Jetez un œil à Phapp.php pour bien comprendre son concept.
Sous-classe Phapp et PhappView pour ajouter des méthodes pour l'accès à la base de données, l'internationalisation et des trucs comme ça.
C'est une bonne idée de configurer une vue de base qui contient des méthodes communes et de tirer vos vues à partir de cela.
Si vous utilisez PDO, vous pouvez hériter de vos vues depuis PhappPDoView et appeler Query () comme ceci:
if( ($result = $this->query(
"SELECT
first,
last
FROM members
WHERE last_login = ?
ORDER BY last",
$lastLogin )) )
{
while( ($row = $result->fetch()) )
{
$contents .= "<li>{$row['first']} {$row['last']}</li>";
}
}
Il est probablement préférable d'ajouter Phapp en sous-module ou sous-arbre au référentiel de votre projet pour pouvoir mettre à jour rapidement et facilement.