Lorsque le serveur Web Apache reçoit une requête HTTP d'un navigateur client, il exécute le fichier APP_DIR/public/index.php, également appelé script d'entrée.
Le script d'entrée est le seul fichier PHP accessible au monde extérieur. Le serveur web Apache dirige toutes les requêtes HTTP vers ce script (souvenez-vous du fichier .htaccess). Avoir ce script d'entrée unique rend le site web plus sûr (en comparant avec la situation où vous permettez à tout le monde d'accéder à tous les fichiers PHP de votre application).
Bien que le fichier index.php soit très important, il est étonnamment petit (voir ci-dessous) :
<?php
use Zend\Mvc\Application;
use Zend\Stdlib\ArrayUtils;
/**
* Le chemin de la racine de l'application est rendue relative.
*/
chdir(dirname(__DIR__));
// Refuse les demandes de fichiers statiques sur le serveur PHP
if (php_sapi_name() === 'cli-server') {
$path = realpath(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
if (__FILE__ !== $path && is_file($path)) {
return false;
}
unset($path);
}
// Chargement de l'autoloader Composer
include __DIR__ . '/../vendor/autoload.php';
if (! class_exists(Application::class)) {
throw new RuntimeException(
"Unable to load application.\n"
. "- Type `composer install` if you are developing locally.\n"
. "- Type `vagrant ssh -c 'composer install'` if you are using Vagrant.\n"
. "- Type `docker-compose run zf composer install` if you are using Docker.\n"
);
}
// Récupère la configuration
$appConfig = require __DIR__ . '/../config/application.config.php';
if (file_exists(__DIR__ . '/../config/development.config.php')) {
$appConfig = ArrayUtils::merge($appConfig, require __DIR__ . '/../config/development.config.php');
}
// Exécute l'application
Application::init($appConfig)->run();
En gros, trois choses y sont faites.
Tout d'abord, à la ligne 10, le dossier de travail courrant est remplacé par APP_DIR
.
Cela simplifie la définition de chemins de fichiers relatifs dans votre application.
Ensuite, à la ligne 22, l'auto-chargement des classes PHP est initialisé.
Cela permet de charger facilement n'importe quelle classe située dans la bibliothèque Zend Framework ou
dans votre application sans avoir besoin de l'instruction require_once
.
Et enfin, à la ligne 40, une instance de la classe Zend\Mvc\Application
est créée. L'application est
initialisée avec les paramètres issus du fichier de configuration application.config.php et
l'application est exécutée.