mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-09-18 07:26:40 +02:00
2b316e79e5
Provides an interface for classes to implement their own flush() functionality. This function gets called early in a request on all implementations of Flushable when flush=1|all is requested in the URL. This fix came out of an issue where Requirements combined files were not being cleaned up after dev/build?flush=1, due to the fact that flush would only occur when you called it while on a page that used those combined files, but not in any other contexts. This will now call flush on any implementors of Flushable regardless of the context of where flush was called.
103 lines
3.0 KiB
Markdown
103 lines
3.0 KiB
Markdown
# Execution Pipeline
|
|
|
|
## Introduction
|
|
|
|
This page documents all the steps from an URL request to the delivered page.
|
|
|
|
## .htaccess and RewriteRule
|
|
|
|
Silverstripe uses **[mod_rewrite](http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html)** 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 .* framework/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 `framework/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 `framework/main.php` is called with the REQUEST_FILENAME (%1) as the `url` parameter and also appends the original
|
|
QUERY_STRING.
|
|
|
|
See the [mod_rewrite documentation](http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html) 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`.
|
|
|
|
## Director and URL patterns
|
|
|
|
main.php relies on `[api:Director]` to work out which controller should handle this request. `[api:Director]` will instantiate that
|
|
controller object and then call `[api:Controller::run()]`.
|
|
|
|
In general, the URL is build up as follows: `page/action/ID/otherID` - e.g. http://localhost/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
|
|
public function addToCart ($request) {
|
|
$param = $request->allParams();
|
|
echo "my ID = " . $param["ID"];
|
|
$obj = MyProduct::get()->byID($param["ID"]);
|
|
$obj->addNow();
|
|
}
|
|
|
|
## Controllers and actions
|
|
|
|
`[api:Controller]`s 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 {
|
|
|
|
private static $allowed_actions = array('signup');
|
|
|
|
public function signup($id, $otherId) {
|
|
return $this->renderWith('MyTemplate');
|
|
}
|
|
|
|
}
|
|
|
|
## SSViewer template rendering
|
|
|
|
See [templates](/reference/templates) for information on the SSViewer template system.
|
|
|
|
## Flush requests
|
|
|
|
If `?flush=1` is requested in the URL, e.g. http://mysite.com?flush=1, this will trigger a call to `flush()` on
|
|
any classes that implement the `Flushable` interface.
|
|
|
|
See [reference documentation on Flushable](/reference/flushable) for more details.
|
|
|
|
|