Manuel d'apprentissage
⁂
Aspect framework
Dans cette section nous expliquons comment créer une application basée sur Hoa, en ré-utilisant tous les outils et automatismes à notre disposition.
Table des matières
Aspect framework, un proof-of-concept
Hoa se définit avant tout comme un ensemble de bibliothèques. Toutefois, pour engager le développement avec Hoa, il est nécessaire de proposer des mécanismes dignes d'un framework afin de faciliter son apprentissage, son utilisation et ses contributions. C'est pourquoi Hoa propose un aspect framework qui doit être vu comme une démonstration de faisabilité, ou un proof-of-concept.
Nous noterons que l'aspect framework est évidemment tourné vers un usage intensif des bibliothèques, i.e. que nous ne proposerons pas d'« outils boîte-noires » sur lesquelles l'utilisateur n'a aucun contrôle. La philosophie de Hoa est tournée vers les bibliothèques, i.e. vers le fait que l'utilisateur sait et comprend parfalient ce qu'il fait. Ces bibliothèques fonctionnent bien ensemble, ce qui entraîne une modularité qui peut s'apparenter à des comportements rencontrés dans des frameworks, mais nous saurons toujours ce que nous faisons. Le fait que nous puissons créer ses propres bibliothèques et composants facilite la réutilisation et le partage de son travail, qui sont des aspects importants des frameworks.
Enfin, Hoa met particulièrement l'accent sur l'hackability (la bidouillabilité), i.e. que tout est modifiable (sans pour autant observer une régression des fonctionnalités). Nous saurons alors capable de construire une application avec nos propres spécificités, mécanismes, outils et fonctionnements.
Créer une application
Créer une application est très simple. Hoa propose deux mécanismes : le premier à travers Mercurial, le second à travers une archive exécutable Phar. Ainsi, première solution :
$ mkdir -p ~/Development/MyApp/
$ cd !!$
$ hg clone http://hg.hoa-project.net/Framework .
$ hoa tree --list-directory
~/Development/MyApp/
|-- Application/
| |-- Public/
|-- Data/
| |-- Bin/
| | |-- Command/
| |-- Etc/
| | |-- Configuration/
| | |-- Locale/
| |-- Lost+found/
| |-- Module/
| |-- Temporary/
| |-- Variable/
| | |-- Cache/
| | |-- Database/
| | |-- Log/
| | |-- Private/
| | |-- Run/
| | |-- Test/
| | | |-- Dictionary/
| | | |-- Repository/
|-- Stub/
Ou alors avec une archive exécutable :
$ mkdir -p ~/Development/MyApp/
$ cd !!$
$ wget http://download.hoa-project.net/Framework/Hoa_Framework.next.phar
$ php Hoa_Framework.next.phar
Usage : Hoa_Framework.next.phar <options>
Options :
-m, --metadata : Print all metadata.
-s, --signature : Print signature.
-p, --phar : Phar informations.
-e, --extract : Extract application in the current directory.
-h, --help : This help.
-?, --help : This help.
$ php Hoa_Framework.next.phar --extract
Extracted in ~/Development/MyApp
Nous retrouvons l'architecture du dossier Data/ que propose
l'abstraction hoa://, tout comme pour le dossier
Application/. Nous noterons que Hoa est absent
du framework !
Nous allons maintenant préciser à l'application où se trouve Hoa et créer notre propre script dédié à notre application.
Où est Hoa ?
Dans le dossier Data/Bin/, nous trouvons les scripts
whereishoa et whereishoa.bat. Attention, si vous
n'utilisez pas une installation « standard » de PHP, vous devrez retoucher
la première ligne de whereishoa ou la variable
PHP de whereishoa.bat.
Ce script va modifier trois fichiers :
Data/Etc/Configuration/HoaCoreCore.json, fichier de configuration externe du noyau ;Data/Etc/Configuration/.Cache/HoaCoreCore.php, son équivalent en cache ;Data/Core.link.php, un lien vers le noyau de Hoa.
Le fichier le plus important est bien entendu
Data/Core.link.php, qui, lorsqu'il est inclu,
liera notre application avec Hoa. Plusieurs avantages
apparaissent : peu importe où est installé Hoa, notre application va toujours
inclure Data/Core.link.php et nous n'aurons qu'à relancer
Data/Bin/whereishoa pour la lier à Hoa ; ce qui implique que
notre application pourra choisir entre plusieurs versions de
Hoa si plusieurs existent. Enfin l'application peut même choisir
d'embarquer Hoa ou pas, le choix pouvant être laissé à
l'utilisateur lors de l'installation s'il souhaite utiliser la version
embarquée de Hoa ou sa propre installation. Bref, nous aurons compris que le
fichier Data/Core.link.php agit comme un routeur
vers Hoa et que nous n'aurons jamais à modifier notre application si nous
déplaçons ou modifie Hoa.
Lors de la création d'une application, tout est configuré pour chercher Hoa
dans le dossier /usr/local/lib/hoa ; ce qui implique que si Hoa
est présent dans ce dossier, pas besoin de lancer le script, sinon :
$ Data/Bin/whereishoa
** Where is Hoa **
Ready to redefine the path to Hoa?
We need to redefine it in:
• the Core.link.php file;
• the configuration file;
• the configuration cache file.
There we go [y/n]? y
A very simple question: where is Hoa so?
> ▋
Si le système et les droits le permettent, le fichier
Data/Core.link.php sera un lien symbolique
au lieu d'être un fichier PHP comportant une instruction
require (comportement par défaut).
Commandes dédiées à l'application
Nous avons vu que les scripts hoa et hoa.bat de
Hoa sont très pratiques. Nous aimerions pouvoir en faire autant pour notre
application, et qui plus est, avec des commandes personnalisées ! Nous
remarquons que les scripts myapp et myapp.bat sont
présents dans le dossier Data/Bin/. Ces scripts
étendent les scripts hoa et hoa.bat
de Hoa (nous retrouvons donc les mêmes commandes) et sont
dédiés à notre application car ils la connaissent. Pour
personnaliser notre application, il nous suffit de les
renommer (nous utiliserons myapp dans tous les exemples). Libre à
nous de placer ces scripts dans le $PATH par la suite.
$ Data/Bin/myapp
// Homescreen.
$ mv !! !!:s/myapp/gordonsapp
mv Data/Bin/myapp Data/Bin/gordonsapp
$ !!$
Data/Bin/gordonsapp
// Homescreen.
Pour se persuader de la différence entre hoa (dans Hoa) et
myapp (dans notre application), il suffit de résoudre le
chemin hoa://Data/. Le résultat attendu est n'importe où pour
hoa (comme il ne connaît pas notre application), et le bon
chemin pour myapp car il connaît notre application ;
ainsi :
$ hoa protocol:resolve hoa://Data
// Somewhere, in a galaxy far, far away…
$ myapp protocol:resolve hoa://Data
hoa://Data is equivalent to:
~/Development/MyApp/Data/
Nous verrons plus tard comment écrire des commandes uniquement accessibles depuis notre application et pas depuis Hoa, tout comme écrire des bibliothèques réservées à notre application et non pas à Hoa (donc à toutes nos applications).
Tester l'application
L'application contient déjà un dossier Application/Public/
avec un fichier index.php. Nous allons le tester immédiatement.
Si aucune erreur n'apparaît, c'est que tout est bien fonctionnel.
Nous pourrons exécuter notre index de cette manière :
$ php Application/Public/index.php
Hello you! I'm your first Hoa-based application \o/.
Toutes mes félicitations ! Vous avez installé Hoa et vous avez créé votre première application avec vos propres scripts !
