Site is a Website framework built on top of Swat. Site provides several features in one monolothic package:
- general application framework
- command line application framework
- web application framework
- web request routing
- image processing
- media processing
- account sign in and session management
- ad referral processing
- attachment uploading
- cdn management
- user commenting
This represents an application. There are two main child classes:
- SiteWebApplication, and
Reusable features of applications (web or CLI) that should be available wherever there is application context are provided using a module interface.
Example provided modules are:
- messages (cross-request session messages)
Modules declare their dependencies and are initialized using a tree sorting
algorithm. For example, the
messages module depends on the
SitePage and SitePageDecorator
Pages represent route endpoints (URLs) in a web application. The URL path is
often referred to as
$source. Each page has several lifecycle hooks that can
init()- initialize objects that may be common to both the
process()and build methods. Validating HTTP GET parameters can be done here.
process()- runs between
build(). This method is indended to contain request logic that might prevent the page from being rendered. Handling HTTP POST parameters is done here.
build()- use this method to render content and pass it to the page layout. If the page request does not cause a redirect, this method is used to build the response.
finalize()- use this method to collect HTML head entries or perform any other post-build operations.
Decorators are composable objects that implement the page interface. They can enable horizontal reuse of features.
In a web application, each page has an associated layout. The page and layout
are created and configured in
SiteWebApplication::getPage(). One or more
SitePageFactory objects may be used to select the correct page object and
layout for a request.
The page sets properties on the layout's
$data object. These properties can
be used directly inside layout templates. Templates use pure immediate-mode
Like pages, layouts have request lifecycle hooks. These hooks run before the page hooks of the same name:
complete()- this hook is only present in layouts and allows using data from the page's
finalize()hook to build layout template values. It runs after the page's
Make sure the silverorange composer repository is added to the
for the project and then run:
composer require silverorange/site