The Dispatcher
All requests are routed through the concrete5 dispatcher. Checking out your site’s index.php, you’ll notice that it consists of a single line:
require('concrete/dispatcher.php');
What does the dispatcher do? In order:
- It sets up the C5_EXECUTE constant with a value of true.
if (!defined("C5_EXECUTE")) {
define('C5_EXECUTE', true);
}
- It performs several startup checks to load configuration files and makes sure the dispatcher is not being called directly.
- We load the call the database loader:
## Load the database ##
Loader::database();
- Load the cache library and start the cache.
- We load the core libraries, then the core models.
- We load theme paths, session handlers, etc.
Finally we’re ready for the good stuff. We take the request to the dispatcher and get the matching collection object:
$req = Request::get();
$req->setCurrentPage($c);
If the collection cannot be found, the user is sent to /page_not_found:
switch($c->getError()) {
case COLLECTION_NOT_FOUND:
$v = View::getInstance();
$v->render('/page_not_found');
break;
}
We check for maintenance mode, then create a new permissions object for the current collection:
$cp = new Permissions($c);
Now we check to make sure there’s nothing wrong with the collection’s permissions. If an error is returned, we render /page_forbidden:
switch($cp->getError()) {
case COLLECTION_FORBIDDEN:
$v = View::getInstance();
$v->setCollectionObject($c);
$v->render('/page_forbidden');
break;
}
We then load the appropriate version based on the permissions object, record the page view in the site statistics table, and fire the on_page_view event:
## Fire the on_page_view Event
Events::fire('on_page_view', $c, $u)
And finally, we render the page:
$v = View::getInstance();
$v->render($c);
This section focuses on what happens when we sent a request to your concrete5 site, and how the dispatcher handles the request. If you'd like to take a look at the file for yourself, go ahead-- it's located at concrete/dispatcher. You'll notice there's a lot going on in there! As we step through each part of this file, we'll gain some insight into everything that happens behind the scenes before a page is rendered.