Exemple #1 Une arborescence d'application classique
- .htaccess // Règles de réécriture
+ public/
| - index.php // Point d'entrée de l'application
| + css/
| + js/
| + img/
+ conf/
| - application.ini // Configuration de l'application
- application/
- Bootstrap.php // Amorçage
+ controllers/
- Index.php // Contrôleur par défaut
+ views/
|+ index/
- index.phtml // Modèle de vue pour l'action par défaut
+ library/ // Bibliothèques
+ models/ // Modèles
+ plugins/ // Plugins
Il faut définir le DocumentRoot du serveur web sur le
répertoire public, de sorte que seules les
ressources publiques soient accessibles depuis le web.
Exemple #2 Une arborescence d'application multi-modules
+ public/
+ conf/
+ application/
+ modules/
+ Index/ //module par défaut
+ controllers/
+ views/
+ Admin/ //un autre module
+ controllers/
+ views/
+ library/
+ models/
+ plugins/
- Bootstrap.php
Dans une application multi-modules, chaque module possède ses propres
répertoires controllers et views
sous application/modules/<NomDuModule>/. Les
modules enregistrés sont déclarés dans
application.modules.
Exemple #3 Point d'entrée
Le fichier index.php situé dans le répertoire public est le seul point d'entrée de l'application ; il faut y réécrire toutes les requêtes (il est possible d'utiliser un fichier .htaccess avec Apache + mod_php, ou l'équivalent pour le serveur web utilisé, voir ci-dessous).
<?php
define("APPLICATION_PATH", dirname(dirname(__FILE__)));
$app = new Yaf_Application(APPLICATION_PATH . "/conf/application.ini");
$app->bootstrap() //appelle les méthodes d'amorçage définies dans Bootstrap.php
->run();
?>Exemple #4 Règle de réécriture
#pour apache (.htaccess)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php
#pour nginx
server {
listen 80;
server_name domain.com;
root document_root;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$args;
}
}
#pour lighttpd
$HTTP["host"] =~ "(www.)?domain.com$" {
url.rewrite = (
"^/(.+)/?$" => "/index.php/$1",
)
}
Exemple #5 Amorçage
Toute méthode de la classe Bootstrap dont le nom
commence par _init est automatiquement appelée, dans
l'ordre de définition, par
Yaf_Application::bootstrap(). Chacune de ces
méthodes reçoit l'instance de Yaf_Dispatcher en
argument. Les méthodes portant un autre nom ne sont pas appelées
automatiquement.
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract
{
public function _initConfig(Yaf_Dispatcher $dispatcher)
{
// appelée en premier
}
public function _initPlugin(Yaf_Dispatcher $dispatcher)
{
// appelée en deuxième
}
public function _initRoute(Yaf_Dispatcher $dispatcher)
{
// appelée en troisième
}
}
?>Exemple #6 Configuration de l'application
application.ini est le fichier de configuration de l'application. Les constantes définies dans index.php peuvent y être utilisées, et les sections peuvent hériter les unes des autres.
[yaf] ;APPLICATION_PATH est la constante définie dans index.php application.directory=APPLICATION_PATH "/application/" ;la section product hérite de la section yaf [product:yaf] foo=bar
Exemple #7 Configuration de l'application sous forme de tableau PHP
Outre un fichier de configuration INI, il est également possible de passer un simple tableau PHP à Yaf_Application::__construct() en guise de configuration.
<?php
$config = array(
"application" => array(
"directory" => APPLICATION_PATH . "/application/",
),
);
$app = new Yaf_Application($config);
?>Exemple #8 Contrôleur par défaut
Dans Yaf, le contrôleur par défaut se nomme IndexController :
<?php
class IndexController extends Yaf_Controller_Abstract
{
// nom de l'action par défaut
public function indexAction()
{
$this->getView()->content = "Hello World";
}
}
?>Exemple #9 Modèle de vue par défaut
Le script de vue du contrôleur/action par défaut est application/views/index/index.phtml. Yaf fournit un petit moteur de vue nommé Yaf_View_Simple, dont les modèles sont de simples scripts PHP.
<html>
<head>
<title>Hello World</title>
</head>
<body>
<?php echo $content;?>
</body>
</html>Exemple #10 Exécution de l'application
En pointant le navigateur sur le domaine configuré
(par exemple http://www.example.com), la réponse
ressemblera à :
Résultat de l'exemple ci-dessus est similaire à :
<html> <head> <title>Hello World</title> </head> <body> hello world </body> </html>
Note:
L'exemple minimal ci-dessus peut également être généré avec le générateur de code de Yaf (tools/cg/yaf_cg), livré avec le » dépôt source de Yaf :
$ cd tools/cg $ ./yaf_cg -d output_directory [-a application_name] [--namespace]yaf_cg génère un squelette plus complet et commenté que celui présenté dans ce tutoriel : un point d'entrée public/ avec ses règles de réécriture, un Bootstrap avec la configuration, la mise en place des plugins et des routes personnalisées, un modèle d'exemple, un contrôleur d'erreur et des modèles de vue. C'est un bon point de départ pour une véritable application.