El archivo index.php

Todas las consultas http dinámicas son procesadas por el archivo index.php que se encuentra en la raíz del sitio web.

Este archivo puede dividirse en tres partes: la inclusión de las configuraciones y librerías del sistema, la inicialización del sistema y el procesamiento de la consulta propiamente dicha.

 

La inclusión del sistema

Las librerías y configuraciones que ponen a funcionar el sistema se establecen con dos inclusiones, el archivo de arranque y la librería de autocarga.

include 'bootstrap.php';
include SYSTEM_ABSPATH . SYSTEM_AUTOLOAD;
El archivo de arranque

Este archivo se encuentra a salvo de las actualizaciones y contiene algunas constantes básicas.

define('SYSTEM_ABSPATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
define('SYSTEM_STORAGE', SYSTEM_ABSPATH . 'storage/');
define('SYSTEM_SETPATH', SYSTEM_STORAGE . 'settings/');
define('SYSTEM_MEDIA_PATH', 'media/');
define('SYSTEM_AUTOLOAD', 'cms/libraries/system/autoload.php');
//define('IS_DEMO', true);
define('GET', INPUT_GET);
define('POST', INPUT_POST);

Entre las constantes se destaca la ruta a la librería de autocarga.

La constante IS_DEMO se utiliza para crear un sitio web "demo", en el que se bloquea cualquier acción sencible.

El archivo de autocarga

Este archivo incluye y ejecuta la autocarga de librerías. De manera predeterminada, incluirá la librería básica del framework. Pero, como se dijo anteriormente, ésta puede ser modificada desde el arranque.

El framework contiene otro archivo de autocarga llamado autoload-quickly.php.

 

La inicialización del sistema

El sistema requiere inicializar tres librerías:

$container = Container::getInstance();
$container->get('system');
$container->get('debugger');

En principio, debemos iniciar el contenedor de dependencias, encargado de crear instancias y/o almacenarlas.

Luego, se almacenan las únicas dos librerías del sistema que requieren ser inicializadas.

También, en esta parte se inicializa el perfilador del código cuando esta activado desde las configuraciones.

 

Procesar la consulta

El sistema para procesar la consulta está basado en una implementación de las PSR.

Primero, con un objeto ServerRequest se representa la consulta. Esta consulta se pasa a un manejador de consultas RequestHandler, que a su vez, la pasará a través varios Middleware hasta que uno de ellos devuelva un objeto Response.

En nuestro framework, el objeto RequestHandler, encargado de ejecutar los middlewares, se llama Runner.

$request = (new ServerRequestFactory)->createServerRequest();
$handler = new Runner();
$handler->add('router');
$response = $handler->handle($request);

En principio, el único middleware que se agrega es el RouterMiddleware, que se encargará de analizar la url, y devolver un controlador o null si la url no se corresponde con un recurso del servidor.

 

Emitir la respuesta

Una vez obtenida la respuesta, ésta debe ser emitida a la consola sapi. Para ello, se utiliza la clase SapiEmitter.

(new SapiEmitter)->emit($response);