2.9 KiB
Execution Pipeline
Introduction
This page documents all the steps from an URL request to the delivered page.
.htaccess and RewriteRule
Silverstripe uses mod_rewrite to deal with page requests.
So instead of having your normal everyday index.php
file which tells all, you need to look elsewhere.
The basic .htaccess file after installing SilverStripe look like this:
<file>
### SILVERSTRIPE START ###
<Files *.ss>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !(\.gif$)|(\.jpg$)|(\.png$)|(\.css$)|(\.js$)
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* sapphire/main.php?url=%1&%{QUERY_STRING} [L]
</IfModule>
### SILVERSTRIPE END ###
</file>
The <Files>
section denies direct access to the template files from anywhere but the server itself.
The next section enables the rewriting engine and rewrites requests to sapphire/main.php
if they meet the following
criteria:
- URI doesn't end in .gif, .jpg, .png, .css, or .js
- The requested file doesn't exist on the filesystem
sapphire/main.php
is called with the REQUEST_FILENAME (%1) as theurl
parameter and also appends the original QUERY_STRING.
See the mod_rewrite documentation for more information on how mod_rewrite works.
main.php
All requests go through main.php, which sets up the environment and then hands control over to Director.
See: The API documentation of [api:Main]
for information about how main.php processes requests.
Director and URL patterns
main.php relies on Director to work out which controller should handle this request. Director will instantiate that
controller object and then call [api:Controller::run()]
.
See: The API documentation of [api:Director]
for information about how Director parses URLs and hands control over to a controller object.
In general, the URL is build up as follows: page/action/ID/otherID - e.g. http://www.mysite.com/mypage/addToCart/12. This will add an object with ID 12 to the cart.
When you create a function, you can access the ID like this:
:::php
function addToCart ($request) {
$param = $r->allParams();
echo "my ID = ".$param["ID"];
$obj = DataObject::get("myProduct", $param["ID"]);
$obj->addNow();
}
Controllers and actions
Controllers are the building blocks of your application.
See: The API documentation for [api:Controller]
You can access the following controller-method with /team/signup
:::php
class Team extends DataObject {}
class Team_Controller extends Controller {
function signup($id, $otherId) {
return $this->renderWith('MyTemplate');
}
}
SSViewer template rendering
See templates for information on the SSViewer template system.