Page lifecycle
Oxwall is under developement at the moment, so below you can see only preliminary version of page-lifecycle. Oxwall implements front-controller pattern and all requests are handled by single script - index.php (it is the only script available for user requests).
Lets see how it works:
First of all .htaccess file in root directory helps us to redirect all requests to front-controller script.
Code of .htaccess:
Options +FollowSymLinks
RewriteEngine On
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
Below you can see the code of index.php script:
Code of index.php:
define('_OW_', true);
define('DS', DIRECTORY_SEPARATOR);
define('OW_DIR_ROOT', dirname(__FILE__).DS );
require_once(OW_DIR_ROOT.'includes'.DS.'init.php');
$application = OW_Application::getInstance();
$application->triggerEvent(OW_EventManager::APPLICATION_INIT);
$application->triggerEvent(OW_EventManager::ROUTE_STARTUP);
$application->route();
$application->triggerEvent(OW_EventManager::ROUTE_SHUTDOWN);
$application->dispatch();
$application->finalize();
$application->returnResponse();
As we can see index.php is very simple script representing a number of definite logic steps:
<-- Page start -->
Define 3 basic constants
_OW_ - is indicator if core and other classes are included within the OW framework (kind of replacement for 'deny from all' instruction)
DS - short variant of standart PHP constant DIRECTORY_SEPARATOR
OW_DIR_ROOT - root directory constant for OW script modules
Include init.php script (loads modules for application startup)
load constants and configs to run the appliaction (stored in separate PHP files - define.php and configs.php)
load global functions (function.php)
load classes to be used by application in any case
register autoloader and error manager (exception interceptor, PHP error handler)
Create an instance of front-controller class (OW_Application) and initialize it
register non-autoloadable classes in autoloader object (Form, Inputs, etc)
add static routes from navigation system (static pages added from admin panel) in router object
register active plugins in plugin manager and load plugin init.php scripts (plugin initializers)
initialize core basic objects: request, response, event manager, theme manager, etc
create and add
HTML document (OW_HtmlDocument) to response object
Trigger event APPLICATION_INIT
<-- User request handling start -->
Route requested uri (Routing process)
search matching route in static navigation routes
— in custom static routes
— in dynamic routes
try to resolve requested uri with system default route
<-- If matches were not found -> show 404 page -->
Trigger event ROUTE_SHUTDOWN
Dispatch routing results (dispatching process)
Trigger event FINALIZE
Compile and send response
<-- Page end (Here script dies) -->