Quick Reference
System Variables
To use these variables, simply get them from the $f3 object, as in:
$current_url = $f3->get('PATH');
AGENT
Type: string, Read-only
A string containing the auto-detected HTTP user agent, e.g. 'Mozilla/5.0 (Linux; Android 4.2.2; Nexus 7) AppleWebKit/537.31'
AJAX
Type: bool, Read-only
TRUE if an XML HTTP request is detected, FALSE otherwise. Default value: Result of the expression $headers['X-Requested-With']=='XMLHttpRequest'
ALIAS
Type: string
Contains the alias (name) of the current route. Empty if the current route is not named.
ALIASES
Type: array
This array contains all named routes which can be used to render the appropriate link urls in your templates.
AUTOLOAD
Type: string|array Default: './'
Search path(**s**) for user-defined PHP classes that the framework will attempt to autoload at runtime. When specifying multiple paths,
you can use a pipe (|), comma (,), or semi-colon (;) as path separator.
$f3->set('AUTOLOAD', 'app/;inc/,./');
See here for more details.
So the following syntaxes are valid:
AUTOLOAD = foo/;bar/,Customer::casehandlerAUTOLOAD = foo/;bar/AUTOLOAD = foo/|bar/AUTOLOAD = "foo/,bar/"
AUTOLOAD = foo/,bar/ is not.
BASE
Type: string, Read-only Default: auto-detected
Path to the index.php main/front controller.
BODY
Type: string, Read-only
HTTP request body for ReSTful post-processing. Contains the php://input stream used by PUT requests, if RAW is false.
CACHE
Type: bool|string Default: FALSE
Cache backend. F3 can handle Memcache module, APC, WinCache, XCache and a filesystem-based cache.
For example: if you'd like to use the memcache module, a configuration string is required, e.g. $f3->set('CACHE','memcache=localhost') (port 11211 by default) or $f3->set('CACHE','memcache=192.168.72.72:11212').
When set to TRUE, or when the connection with the specified memcached server above failed, F3 will auto-detect, in that order, the presence of APC, WinCache, XCache and use the first available of these PHP module.
If none of these shared memory engine has been detected or is available, a filesystem-based backend is used as a fallback (default directory: tmp/cache or you can specify a folder outside the scope of the website, e.g. $f3->set('CACHE','folder=/var/tmp/f3filescache/').
The framework doesn't use any cache engine when a FALSE value is assigned.
CASELESS
Type: bool Default: TRUE
Pattern matching of routes against incoming URIs is case-insensitive by default. Set to FALSE to make it case-sensitive.
CLI
Type: bool, Read-only
TRUE if the request originates from the command-line interface, FALSE if it comes from the web server.
See CLI mode for more details on how to handle CLI requests.
CONTAINER
Type: callable|Prefab|Psr\Container\ContainerInterface
Defines the optional dependency injection container used by Base->call()
and the routing system.
CONTAINER supports PSR-11 containers,
callables
and classes extending Prefab.
Prefab-based classes have to implement the get(string $id) method.
Callables receive the requested $id (e.g. class name) as first argument.
API-incompatible third party containers can be made compatible with a tiny adapter.
$dice = … // Configure the API-incompatible Level-2/Dice container.
$f3->set('CONTAINER', function ($class) use ($dice) {
return $dice->create($class);
});
NB: CONTAINER requires at least Fat-Free Framework 3.6.4.
COOKIE, GET, POST, REQUEST, SESSION, FILES, SERVER, ENV
Type: array
Framework equivalents of PHP globals. For your convenience, F3 automatically synchronizes these variables with the underlying PHP globals. These variables may be used throughout an application. However, direct use in templates is not advised due to security risks.
It could be possible that the PHP configuration is not populating all globals.
If for instance the environment variables are missing,
then you have to add E to the PHP configuration directive variables_order.
CORS
Type: array
Cross-Origin Resource Sharing configuration parameters. Consists of the following options:
headers, string or array, default:'', allowed headers in the requestorigin, string or false, default:false, allowed origin host, i.e*.mydomain.comcredentialsbool, default:false, allow cookiesexpose, string or array, default:false, controls which headers from the response are exposed to the client browserttl, int, detault:0, caching time of the preflight OPTIONS request
To enable basic CORS support, just set CORS.origin to *. For a more defined setup, you can use $f3->copy('HEADERS.Origin','CORS.origin');.
DEBUG
Type: integer Default: 0
Verbosity level of the stack trace. Assign values between 0 to 3 for increasing verbosity levels as follow:
- 0 : suppresses logs of the stack trace.
- 1 : logs files & lines.
- 2 : logs classes & functions as well.
- 3 : logs detailed infos of the objects as well.
0 should be used on production servers.DIACRITICS
Type: array Default: array(), empty array
Additional key-value pairs for foreign-to-ASCII character translations, as used in web->slug.
DNSBL
Type: string Default: '', empty string
Comma-separated list of DNS blacklist servers. Framework generates a 403 Forbidden error if the user's IPv4 address is listed on the specified server(s).
EMOJI
Type: array Default: array(), empty array
Additional key-value pairs of emoji tokens to add to the basic set used when translating a string to Unicode font-supported symbols. (see \UTF->emojify())
ENCODING
Type: string Default: 'UTF-8'
Character set used for document encoding.
ERROR
Type: array, Read-Only
Information about the last HTTP error that occurred:
ERROR.codeis the HTTP status code. e.g.307ERROR.statusis a brief description of the HTTP status code. e.g.'Temporary Redirect'ERROR.textcontains a brief description of the error.ERROR.traceis used for HTTP 500 errors, to retrieve the stack trace.stringERROR.level- error reporting level (E_WARNING,E_STRICT, etc.)
ESCAPE
Type: bool Default: TRUE
Used to enable/disable auto-escaping @tokens used in templates.
EXEMPT
Type: string Default: NULL
Comma-separated list of IPv4 addresses to exempt from DNSBL lookups.
EXCEPTION
Type: object Default: NULL
Contains the exception object when unhandled exceptions occur.
FALLBACK
Type: string Default: 'en'
Language (and dictionary) to use if no translation is available.
FORMATS
Type: array
Storage for custom format rules to add support for multiple localization formats or other cases. See code samples.
$f3->set('FORMATS.polish','FormatHelper->polish');
FRAGMENT
Type: string Default: NULL
Portion of the URI after the optional hash (#) symbol (http://www.example.org/foo.html#bar) FRAGMENT = 'bar'.
HALT
Type: bool Default: TRUE
If TRUE, the framework, after having logged stack trace and errors, stops execution (die without any status) when a non-fatal error is detected.
HEADERS
Type: array,Read-Only
HTTP request headers received by the server. e.g. (simplified)
array (
'Host' => 'fatfreeframework.com'
'Accept-Encoding' => 'gzip,deflate,sdch',
'Accept-Language' => 'en-US,en;q=0.8,ja;q=0.6'
)
HIGHLIGHT
Type: bool Default: TRUE
Enable/disable syntax highlighting of stack traces and Markdown code blocks. When enabled, requires code.css stylesheet.
HOST
Type: string,Read-Only
Server host name.
IP
Type: string,Read-Only
Remote IP address. The framework derives the address from headers if HTTP client is behind a proxy server. Default value: First match of Client-IP then X-Forwarded-For then $_SERVER['REMOTE_ADDR'], otherwise set to ''
JAR
Type: array
Default cookie parameters. Consists of the following options:
expireUnix timestamp, when the cookie should expire. Default:0pathThe path on the server in which the cookie will be available. Default:'/'domainThe domain that the cookie is available to. Default:$_SERVER['SERVER_NAME']if available, else''secureSet the cookie when a secure HTTPS connection exists. Default:$_SERVER['HTTPS']=='on'httponlyMake the cookie accessible only through the HTTP protocol. Default:TRUE
You can refer to session_set_cookie_params() in the PHP Manual for more information.
You can also watch a video that goes over using cookies in the Fat-Free Framework.
LANGUAGE
Type: string Default: auto-detected
Current active language(s). Value is used to load the appropriate language(s) translation file(s) in the folder pointed to by LOCALES. Default: auto-detected from the HTTP Accept-Language request header, e.g. 'en-US,en,es'.
NB: The system locale is loaded accordingly to this variable. E.g:
$f3->set('ENCODING','UTF-8');
$f3->set('LANGUAGE','it-IT');// the locale it_IT.UTF-8 will be automatically loaded using setlocale
See the Localisation section in Base for more details and an example.
LOCALES
Type: string Default: './'
Location of the language(s) dictionaries.
To enable caching for dictionaries from a config file, you need to write it this way:
LOCALES=/path/to/lexicons | 3600
LOGS
Type: string Default: './'
Location of custom logs.
ONERROR
Type: mixed Default: NULL
Callback function to use as custom error handler, or NULL.
ONREROUTE
Type: mixed Default: NULL
Callback function that is called before redirect headers are send. The default behavior (301/302 redirection) will be bypassed unless FALSE is returned.
$f3->set('ONREROUTE',function($url,$permanent){
// do something
});
$f3->reroute('/foo?bar=baz');
PACKAGE
Type: string|null Default: 'Fat-Free Framework'
A string containing the X-Powered-By header.
If empty, the header is not sent.
PARAMS
Type: array Default: array()
Captured values of tokens defined in a route() pattern. PARAMS[0] contains the captured URL relative to the Web root.
PATH
Type: string, Read-Only
The URL relative to BASE. Default value: parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH)
PATTERN
Type: string, Read-Only
Contains the routing pattern that matches the current request URI.
PLUGINS
Type: string Default: __DIR__.'/'
Location of F3 plugins. The default value is the folder where the framework code resides, i.e. the path to base.php.
PORT
Type: integer, Read-Only
TCP/IP listening port used by the Web server. Default value: $_SERVER['SERVER_PORT'] or NULL if not available.
PREFIX
Type: string Default: NULL
Prefix to use with LANGUAGE and LOCALES.
For example, if your dictionary file contains hello = Hello World, the term will be accessible via:
$f3->get('hello')without prefix$f3->get('DICT.hello')ifPREFIX=DICT.(Notice the., it's intentional)
LANGUAGE and LOCALES.
PREMAP
Type: string Default: '', empty string
This variable allows mapped route handlers to be prefixed. For example, defining:
$f3->PREMAP = 'action_';
$f3->map('/item','Item');
is the same as defining:
$f3->route('GET /item','Item->action_get');
$f3->route('POST /item','Item->action_post');
$f3->route('PATCH /item','Item->action_patch');
$f3->route('PUT /item','Item->action_put');
$f3->route('DELETE /item','Item->action_delete');
QUERY
Type: string, Read-Only
Contains the request URI query string (all after the question mark ?).
QUIET
Type: bool Default: FALSE
Toggle switch for suppressing or enabling standard output and error messages. Particularly useful in unit testing.
RAW
Type: bool Default: FALSE
RAW should be TRUE when processing large data coming from php://input which will not fit in memory (cf. BODY).
REALM
Type: string, Read-Only
Full canonical URL. Default value: Result of 'http(s)://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']
RESPONSE
Type: string, Read-Only
The body of the last HTTP response. F3 populates this variable regardless of the QUIET setting.
ROOT
Type: string, Read-Only
Absolute path to document root folder.
ROUTES
Type: array Default: array()
Contains the defined application routes.
SCHEME
Type: string, Read-Only
Server protocol. Default: 'http' or 'https'
SEED
Type: string
The SEED string is used as prefix name for cache entries and temp filenames to avoid cache key collisions. In case you use multiple domains with your application, the auto-generated SEED value would be different by default. If you want to share a common cache and temp file storage across both domains, set a custom SEED before initializing the CACHE:
$f3->set('SEED', $f3->hash('myDomainSEED'));
$f3->set('CACHE', TRUE);
NB: The SEED key is also used for CSRF token generation within the Session handlers.
SERIALIZER
Type: string Default: auto-detected
The default serializer used by the Base->serialize() method. Default value: igbinary if available, otherwise php.
TEMP
Type: string Default: 'tmp/'
Temporary folder for cache, filesystem locks, compiled F3 templates, etc. The default value is the 'tmp/' folder inside the Web root. Adjust accordingly to conform to your site's security policies.
When you're using Google App Engine (GAE) to deploy your application, it's recommended to set it to a cloud storage dir.
TIME
Type: float Default: auto-detected
Starting time of the framework. Default value: The current Unix time in seconds accurate to the nearest microsecond as per the PHP function microtime(**TRUE**).
TZ
Type: string Default: auto-detected
Timezone to use. Changing this value automatically calls the underlying PHP function date_default_timezone_set(). See the list of supported timezones to get a possible value to use here. Falls back to 'UTC' if auto-detection fails.
UI
Type: string Default: './'
Search path for user interface files used by the View and Template classes' render() method.
Accepts a pipe (|), comma (,), or semi-colon (;) as separator for multiple paths.
UNLOAD
Type: callback Default: NULL
Defines the shutdown handler the framework will execute on application shutdown.
UPLOADS
Type: string Default: './'
Directory where file uploads are saved.
URI
Type: string Default: auto-detected
A reference to the current HTTP request URI.
VERB
Type: string Default: auto-detected
A reference to the current HTTP request method.
VERSION
Type: string Default: e.g. '3.2.1-Release'
A string containing the version of the Framework.
XFRAME
Type: string|NULL Default: e.g. 'SAMEORIGIN'
A string containing the X-Frame-Options header.
If empty, the header is not sent.
Template Directives
Token
@tokenReplace
@tokenwith the value of the equivalent F3 variable.{{ mixed expr }}Evaluate expression
expr. Expression can include template tokens, constants, operators (unary, arithmetic, ternary and relational), parentheses, data type converters, and functions. If not an attribute of a template directive, the result is echo'ed.{{ string expr | esc }}Render expression
exprescaped. This is the default framework behavior. The| escsuffix is only necessary if the ESCAPE global variable has been set toFALSE.{{ string expr | raw }}Render expression
exprunescaped. As F3 auto-escapes string tokens by default, you can use this suffix to by-pass the escaping of a particular token.{{ string expr, arg0, …, argN | format }}Render the expression
exprin ICU-format and pass the comma-separated arguments, wherearg0, …, argNis used inexpras reference, each with an optional formatter that can be one of:'date','time','number'or'plural'(additional formatter options possible). Have a look at the format method for more usage examples. More information about ICU formatting of Numbers, Currencies, Dates and Times. Sample:{{'date: {0,date} - time: {0,time} - price: {1,number,currency}',time(),@price | format}}{{ string name, args | alias }}builds an URL of a named route, i.e:
{{ @name, 'a=5,b='.@id | alias }}{~ string expr ~}Evaluate expression
expr, similar to{{expr}}but does not echo the result.{* text-block *}Exclude a segment of your template. Alias to
<exclude>{- {{@BASE}} -}Ignore all tokens within
{- -}expression and print them as they are.
Include
<include [ if="{{ bool condition }}" ] href="{{ string subtemplate }}" [ with="{{ string additional_variables }}" ] />
Get contents of subtemplate and insert at current position in template [ if optional condition is true ].
The current data hive is passed to the subtemplate, enriched with additional_variables if provided (see here for examples).
Exclude
<exclude>text-block</exclude>
Exclude text-block at runtime. Used for embedding comments in templates. An Alias for this is:
{* text-block *}
Ignore
<ignore>text-block</ignore>
Display text-block as it is, without any interpretation/modification by the template engine.
Check
<check if="{{ bool condition }}">
<true>true-block</true>
<false>false-block</false>
</check>
Evaluate condition. If TRUE, the true-block is rendered; else the false-block is rendered.
Short form: If you don't need and don't specify a false block, then, for your convenience, F3 makes the opening and closing tags for true optional:
<check if="{{ @debugmode && @showtrace }}"><code>{{ @showtrace }}</code></check>
Loop
<loop from="{{ statement }}" to="{{ bool expr }}" [ step="{{ statement }}" ]>
text-block
</loop>
Evaluate from statement once. Check if the expression in the to attribute is TRUE, render text-block and evaluate step statement. Repeat iteration until to expression is FALSE.
Example:
<loop from="{{ @i=0 }}" to="{{ @i < count(@bar) }}" step="{{ @i++ }}">
</loop>
Repeat
<repeat group="{{ array @group|expr }}" [ key="{{ scalar @key }}" ] value="{{ mixed @value }}" [ counter="{{ scalar @key }}" ]>
text-block
</repeat>
Repeat text-block as many times as there are elements in the array variable @group or the expression expr. @key and @value function in the same manner as the key-value pair in the equivalent PHP foreach() statement. Variable represented by key in counter attribute increments by 1 with every iteration.
Switch
<switch expr="{{ scalar expr }}">
<case value="{{ scalar @value|expr }}" break="{{ bool TRUE|FALSE }}">
text-block
</case>
.
.
.
<default>
message
</default>
</switch>
Equivalent of the PHP switch-case jump table structure.
Set
<!-- set some variables -->
<set foo="{{ 1+2 }}" bar="{{ @foo+3 }}" baz="xyz" />
<!-- set an array -->
<set myarray="{{ array('a','b','c') }}" />
Used to set some variables dynamically within the template.
