Simplicité est le mot qui définit ce framework PHP. l'approche académique n'a pas été oubliée et tente une implémentation du modèle PAC :

Package "test" pour un "hello world"

/myFirstApp/package/test/test.php : (C)ontroleur

protected function hello(){
$result = $this->getModel()->testWorkflow();
if($result){
$this->getView()->test();
} else {
throw new Exception('Pb au sein du workflow de test',500);
}
}

/myFirstApp/package/test/test_view.php : (P)résentation

public function test(){
$html = 'Hello world';
$this->output($html);
}

/myFirstApp/package/test/test_model.php : modèle d'(A)bstration

public function testWorkflow(){
return true;
}

Cet exemple est présent au sein du dépôt : téléchargez là.

Explication de l'exemple "test"

Le gestionnaire de routage reste simple (loin des possibilités offertes par Symfony) et implémente REST.
l'url suivante : http://www.monsite.local/test/hello/ affiche notre hello world.

Décomposition de l'appel

  • Nom du package appelé : "test". Il est représenté par un répertoire dans le répertoire global "package"
  • Action appelée : "hello". Cette action est une méthode de la class de type "contrôleur". Le contrôleur va demander à la vue son contenu et va en faire un display.

Dans cet exemple, avant d'afficher le "hello world", le contrôleur fait un appel au model pour vérifier le résultat d'un workflow. Si "true" est renvoyé, alors le contrôleur fera le display de la vue. Dans le cas contraire, il lancera une Exception.

Fonctionnement du modèle d'abstraction

Le modèle d'abstraction regroupe les méthodes de workflows et d'accès au SGBD. Dans notre exemple, on fait l'appel à un workflow qui retourne toujours vrai. Le fait de séparrer (au choix du développeur) les workflows et les requêtes, permet de factoriser les accès au SGBD. Au sein d'un modèle, il est tout a fait possible et recommandé de faire appel à un autre model d'un autre package. Il est donc possible d'empiler les workflows et de les décomposer en objet métier.
le sens "Métier" ici veut dire le métier de l'entreprise.

Gestion de l'exception

La levée d'une "exception" suppose que l'on a préparé son code pour la recevoir et la traiter. Au sein du framework, le bootstrap de votre application "index.php" est construit sur un try {} catch (Exception $e) {}.
Vous pouvez en fonction du code de retour, utiliser un package dont le rôle sera par exemple d'afficher votre 404.
En cliquant sur ce lien, vous allez générer cette fameuse 404. La ressource demandée n'existe pas, car le gestionnaire de routage n'a pu déterminer le "package" appelé et l' "action" demandée. Il a donc levé une exception avec le code de retour 404.