Cuando el servidor web Apache recibe una petición HTTP, desde el navegador web del cliente, ejecuta el archivo APP_DIR/public/index.php, este script también es llamado script de entrada.
El script de entrada es el único archivo PHP accesible desde el mundo exterior. El servidor web Apache dirige todas las peticiones HTTP a este script (recordemos el archivo .htaccess). Tener un solo script de entrada hace al sitio web más seguro (en comparación con la situación en la que permitimos a todo el mundo acceder a todos los archivos PHP de nuestra aplicación).
A pesar de que el archivo index.php es muy importante es sorprendentemente pequeño:
<?php
use Zend\Mvc\Application;
use Zend\Stdlib\ArrayUtils;
/**
* This makes our life easier when dealing with paths. Everything is relative
* to the application root now.
*/
chdir(dirname(__DIR__));
// Decline static file requests back to the PHP built-in webserver
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);
}
// Composer autoloading
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"
);
}
// Retrieve 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');
}
// Run the application!
Application::init($appConfig)->run();
Fundamentalmente, hay tres cosas que hace el script.
Primero, en la línea 10, la carpeta actual de trabajo se cambia a APP_DIR
.
Esto simplifica la definición de rutas de archivos relativas en nuestra aplicación.
Luego en la línea 22, la clase autoloading de PHP se ejecuta. Esto permite cargar
fácilmente cualquier clase, tanto si está ubicada en la biblioteca Zend Framework como
si está en nuestra aplicación, sin necesidad de usar una sentencia require_once
.
Finalmente, en la línea 40, se crea una instancia de la clase Zend\Mvc\Application
.
La aplicación se inicia con las configuraciones leídas desde el archivo de
configuración application.config.php y por último la aplicación se ejecuta.