class SSTemplateParser extends Parser implements TemplateParser

This is the parser for the SilverStripe template language. It gets called on a string and uses a php-peg parser to match that string against the language structure, building up the PHP code to execute that structure as it parses

The $result array that is built up as part of the parsing (see thirdparty/php-peg/README.md for more on how parsers build results) has one special member, 'php', which contains the php equivalent of that part of the template tree.

Some match rules generate alternate php, or other variations, so check the per-match documentation too.

Terms used:

Marked: A string or lookup in the template that has been explictly marked as such - lookups by prepending with "$" (like $Foo.Bar), strings by wrapping with single or double quotes ('Foo' or "Foo")

Bare: The opposite of marked. An argument that has to has it's type inferred by usage and 2.4 defaults.

Example of using a bare argument for a loop block: <% loop Foo %>

Block: One of two SS template structures. The special characters "<%" and "%>" are used to wrap the opening and (required or forbidden depending on which block exactly) closing block marks.

Open Block: An SS template block that doesn't wrap any content or have a closing end tag (in fact, a closing end tag is forbidden)

Closed Block: An SS template block that wraps content, and requires a counterpart <% end_blockname %> tag

Angle Bracket: angle brackets "<" and ">" are used to eat whitespace between template elements N: eats white space including newlines (using in legacy _t support)

Methods

__construct(array $closedBlocks = array(), array $openBlocks = array())

Allow the injection of new closed & open block callables

construct($matchrule, $name, $arguments = null)

Override the function that constructs the result arrays to also prepare a 'php' item in the array

setClosedBlocks(array $closedBlocks)

Set the closed blocks that the template parser should use

setOpenBlocks(array $openBlocks)

Set the open blocks that the template parser should use

addClosedBlock(string $name, callable $callable)

Add a closed block callable to allow <% name %><% end_name %> syntax

addOpenBlock(string $name, callable $callable)

Add a closed block callable to allow <% name %> syntax

match_Template($stack = array())

No description

Template_STR($res, $sub)

No description

match_Word($stack = array())

No description

match_NamespacedWord($stack = array())

No description

match_Number($stack = array())

No description

match_Value($stack = array())

No description

match_CallArguments($stack = array())

No description

CallArguments_Argument($res, $sub)

Values are bare words in templates, but strings in PHP. We rely on PHP's type conversion to back-convert strings to numbers when needed.

match_Call($stack = array())

No description

match_LookupStep($stack = array())

No description

match_LastLookupStep($stack = array())

No description

match_Lookup($stack = array())

No description

Lookup__construct($res)

No description

Lookup_AddLookupStep($res, $sub, $method)

The basic generated PHP of LookupStep and LastLookupStep is the same, except that LookupStep calls 'obj' to get the next ViewableData in the sequence, and LastLookupStep calls different methods (XML_val, hasValue, obj) depending on the context the lookup is used in.

Lookup_LookupStep($res, $sub)

No description

Lookup_LastLookupStep($res, $sub)

No description

match_Translate($stack = array())

No description

match_InjectionVariables($stack = array())

No description

match_Entity($stack = array())

No description

Translate__construct($res)

No description

Translate_Entity($res, $sub)

No description

Translate_Default($res, $sub)

No description

Translate_Context($res, $sub)

No description

Translate_InjectionVariables($res, $sub)

No description

Translate__finalise($res)

No description

InjectionVariables__construct($res)

No description

InjectionVariables_InjectionName($res, $sub)

No description

InjectionVariables_Argument($res, $sub)

No description

InjectionVariables__finalise($res)

No description

match_SimpleInjection($stack = array())

No description

match_BracketInjection($stack = array())

No description

match_Injection($stack = array())

No description

Injection_STR($res, $sub)

No description

match_DollarMarkedLookup($stack = array())

No description

DollarMarkedLookup_STR($res, $sub)

No description

match_QuotedString($stack = array())

No description

match_Null($stack = array())

No description

match_Boolean($stack = array())

No description

match_Sign($stack = array())

No description

match_Float($stack = array())

No description

match_Hexadecimal($stack = array())

No description

match_Octal($stack = array())

No description

match_Binary($stack = array())

No description

match_Decimal($stack = array())

No description

match_IntegerOrFloat($stack = array())

No description

match_FreeString($stack = array())

No description

match_Argument($stack = array())

No description

Argument_DollarMarkedLookup($res, $sub)

If we get a bare value, we don't know enough to determine exactly what php would be the translation, because we don't know if the position of use indicates a lookup or a string argument.

Argument_QuotedString($res, $sub)

No description

Argument_Null($res, $sub)

No description

Argument_Boolean($res, $sub)

No description

Argument_IntegerOrFloat($res, $sub)

No description

Argument_Lookup($res, $sub)

No description

Argument_FreeString($res, $sub)

No description

match_ComparisonOperator($stack = array())

No description

match_Comparison($stack = array())

No description

Comparison_Argument($res, $sub)

No description

Comparison_ComparisonOperator($res, $sub)

No description

match_PresenceCheck($stack = array())

No description

PresenceCheck_Not($res, $sub)

No description

PresenceCheck_Argument($res, $sub)

No description

match_IfArgumentPortion($stack = array())

No description

IfArgumentPortion_STR($res, $sub)

No description

match_BooleanOperator($stack = array())

No description

match_IfArgument($stack = array())

No description

IfArgument_IfArgumentPortion($res, $sub)

No description

IfArgument_BooleanOperator($res, $sub)

No description

match_IfPart($stack = array())

No description

match_ElseIfPart($stack = array())

No description

match_ElsePart($stack = array())

No description

match_If($stack = array())

No description

If_IfPart($res, $sub)

No description

If_ElseIfPart($res, $sub)

No description

If_ElsePart($res, $sub)

No description

match_Require($stack = array())

No description

Require_Call($res, $sub)

No description

match_CacheBlockArgument($stack = array())

No description

CacheBlockArgument_DollarMarkedLookup($res, $sub)

No description

CacheBlockArgument_QuotedString($res, $sub)

No description

CacheBlockArgument_Lookup($res, $sub)

No description

match_CacheBlockArguments($stack = array())

No description

CacheBlockArguments_CacheBlockArgument($res, $sub)

No description

match_CacheBlockTemplate($stack = array())

No description

match_UncachedBlock($stack = array())

No description

UncachedBlock_Template($res, $sub)

No description

match_CacheRestrictedTemplate($stack = array())

No description

CacheRestrictedTemplate_CacheBlock($res, $sub)

No description

CacheRestrictedTemplate_UncachedBlock($res, $sub)

No description

match_CacheBlock($stack = array())

No description

CacheBlock__construct($res)

No description

CacheBlock_CacheBlockArguments($res, $sub)

No description

CacheBlock_Condition($res, $sub)

No description

CacheBlock_CacheBlock($res, $sub)

No description

CacheBlock_UncachedBlock($res, $sub)

No description

CacheBlock_CacheBlockTemplate($res, $sub)

No description

match_OldTPart($stack = array())

No description

match_N($stack = array())

No description

OldTPart__construct($res)

No description

OldTPart_QuotedString($res, $sub)

No description

OldTPart_CallArguments($res, $sub)

No description

OldTPart__finalise($res)

No description

match_OldTTag($stack = array())

No description

OldTTag_OldTPart($res, $sub)

No description

match_OldSprintfTag($stack = array())

No description

OldSprintfTag__construct($res)

No description

OldSprintfTag_OldTPart($res, $sub)

No description

OldSprintfTag_CallArguments($res, $sub)

No description

match_OldI18NTag($stack = array())

No description

OldI18NTag_STR($res, $sub)

No description

match_NamedArgument($stack = array())

No description

NamedArgument_Name($res, $sub)

No description

NamedArgument_Value($res, $sub)

No description

match_Include($stack = array())

No description

Include__construct($res)

No description

Include_Template($res, $sub)

No description

Include_NamedArgument($res, $sub)

No description

Include__finalise($res)

No description

match_BlockArguments($stack = array())

No description

match_NotBlockTag($stack = array())

No description

match_ClosedBlock($stack = array())

No description

ClosedBlock__construct($res)

As mentioned in the parser comment, block handling is kept fairly generic for extensibility. The match rule builds up two important elements in the match result array: 'ArgumentCount' - how many arguments were passed in the opening tag 'Arguments' an array of the Argument match rule result arrays

ClosedBlock_BlockArguments($res, $sub)

No description

ClosedBlock__finalise($res)

No description

ClosedBlock_Handle_Loop($res)

This is an example of a block handler function. This one handles the loop tag.

ClosedBlock_Handle_With($res)

The closed block handler for with blocks

match_OpenBlock($stack = array())

No description

OpenBlock__construct($res)

No description

OpenBlock_BlockArguments($res, $sub)

No description

OpenBlock__finalise($res)

No description

OpenBlock_Handle_Debug($res)

This is an open block handler, for the <% debug %> utility tag

OpenBlock_Handle_Base_tag($res)

This is an open block handler, for the <% base_tag %> tag

OpenBlock_Handle_Current_page($res)

This is an open block handler, for the <% current_page %> tag

match_MismatchedEndBlock($stack = array())

No description

MismatchedEndBlock__finalise($res)

No description

match_MalformedOpenTag($stack = array())

No description

MalformedOpenTag__finalise($res)

No description

match_MalformedCloseTag($stack = array())

No description

MalformedCloseTag__finalise($res)

No description

match_MalformedBlock($stack = array())

No description

match_Comment($stack = array())

No description

Comment__construct($res)

No description

match_TopTemplate($stack = array())

No description

TopTemplate__construct($res)

The TopTemplate also includes the opening stanza to start off the template

match_Text($stack = array())

No description

Text__finalise($res)

We convert text

string
compileString(string $string, string $templateName = "", bool $includeDebuggingComments = false, bool $topTemplate = true)

Compiles some passed template source code into the php code that will execute as per the template source.

mixed|string
compileFile($template)

Compiles some file that contains template source code, and returns the php code that will execute as per that source

Details

at line 91
__construct(array $closedBlocks = array(), array $openBlocks = array())

Allow the injection of new closed & open block callables

Parameters

array $closedBlocks
array $openBlocks

at line 101
construct($matchrule, $name, $arguments = null)

Override the function that constructs the result arrays to also prepare a 'php' item in the array

Parameters

$matchrule
$name
$arguments

at line 118
setClosedBlocks(array $closedBlocks)

Set the closed blocks that the template parser should use

This method will delete any existing closed blocks, please use addClosedBlock if you don't want to overwrite

Parameters

array $closedBlocks

Exceptions

InvalidArgumentException

at line 134
setOpenBlocks(array $openBlocks)

Set the open blocks that the template parser should use

This method will delete any existing open blocks, please use addOpenBlock if you don't want to overwrite

Parameters

array $openBlocks

Exceptions

InvalidArgumentException

at line 148
addClosedBlock(string $name, callable $callable)

Add a closed block callable to allow <% name %><% end_name %> syntax

Parameters

string $name The name of the token to be used in the syntax <% name %><% end_name %>
callable $callable The function that modifies the generation of template code

Exceptions

InvalidArgumentException

at line 160
addOpenBlock(string $name, callable $callable)

Add a closed block callable to allow <% name %> syntax

Parameters

string $name The name of the token to be used in the syntax <% name %>
callable $callable The function that modifies the generation of template code

Exceptions

InvalidArgumentException

at line 196
match_Template($stack = array())

Parameters

$stack

at line 444
Template_STR($res, $sub)

Parameters

$res
$sub

at line 451
match_Word($stack = array())

Parameters

$stack

at line 463
match_NamespacedWord($stack = array())

Parameters

$stack

at line 475
match_Number($stack = array())

Parameters

$stack

at line 487
match_Value($stack = array())

Parameters

$stack

at line 499
match_CallArguments($stack = array())

Parameters

$stack

at line 552
CallArguments_Argument($res, $sub)

Values are bare words in templates, but strings in PHP. We rely on PHP's type conversion to back-convert strings to numbers when needed.

Parameters

$res
$sub

at line 564
match_Call($stack = array())

Parameters

$stack

at line 622
match_LookupStep($stack = array())

Parameters

$stack

at line 655
match_LastLookupStep($stack = array())

Parameters

$stack

at line 669
match_Lookup($stack = array())

Parameters

$stack

at line 745
Lookup__construct($res)

Parameters

$res

at line 756
Lookup_AddLookupStep($res, $sub, $method)

The basic generated PHP of LookupStep and LastLookupStep is the same, except that LookupStep calls 'obj' to get the next ViewableData in the sequence, and LastLookupStep calls different methods (XML_val, hasValue, obj) depending on the context the lookup is used in.

Parameters

$res
$sub
$method

at line 770
Lookup_LookupStep($res, $sub)

Parameters

$res
$sub

at line 775
Lookup_LastLookupStep($res, $sub)

Parameters

$res
$sub

at line 784
match_Translate($stack = array())

Parameters

$stack

at line 897
match_InjectionVariables($stack = array())

Parameters

$stack

at line 942
match_Entity($stack = array())

Parameters

$stack

at line 954
Translate__construct($res)

Parameters

$res

at line 959
Translate_Entity($res, $sub)

Parameters

$res
$sub

at line 964
Translate_Default($res, $sub)

Parameters

$res
$sub

at line 969
Translate_Context($res, $sub)

Parameters

$res
$sub

at line 974
Translate_InjectionVariables($res, $sub)

Parameters

$res
$sub

at line 979
Translate__finalise($res)

Parameters

$res

at line 984
InjectionVariables__construct($res)

Parameters

$res

at line 989
InjectionVariables_InjectionName($res, $sub)

Parameters

$res
$sub

at line 994
InjectionVariables_Argument($res, $sub)

Parameters

$res
$sub

at line 999
InjectionVariables__finalise($res)

Parameters

$res

at line 1010
match_SimpleInjection($stack = array())

Parameters

$stack

at line 1035
match_BracketInjection($stack = array())

Parameters

$stack

at line 1062
match_Injection($stack = array())

Parameters

$stack

at line 1093
Injection_STR($res, $sub)

Parameters

$res
$sub

at line 1100
match_DollarMarkedLookup($stack = array())

Parameters

$stack

at line 1113
DollarMarkedLookup_STR($res, $sub)

Parameters

$res
$sub

at line 1120
match_QuotedString($stack = array())

Parameters

$stack

at line 1156
match_Null($stack = array())

Parameters

$stack

at line 1168
match_Boolean($stack = array())

Parameters

$stack

at line 1180
match_Sign($stack = array())

Parameters

$stack

at line 1192
match_Float($stack = array())

Parameters

$stack

at line 1204
match_Hexadecimal($stack = array())

Parameters

$stack

at line 1216
match_Octal($stack = array())

Parameters

$stack

at line 1228
match_Binary($stack = array())

Parameters

$stack

at line 1240
match_Decimal($stack = array())

Parameters

$stack

at line 1252
match_IntegerOrFloat($stack = array())

Parameters

$stack

at line 1369
match_FreeString($stack = array())

Parameters

$stack

at line 1388
match_Argument($stack = array())

Parameters

$stack

at line 1555
Argument_DollarMarkedLookup($res, $sub)

If we get a bare value, we don't know enough to determine exactly what php would be the translation, because we don't know if the position of use indicates a lookup or a string argument.

Instead, we record 'ArgumentMode' as a member of this matches results node, which can be: - lookup if this argument was unambiguously a lookup (marked as such) - string is this argument was unambiguously a string (marked as such, or impossible to parse as lookup) - default if this argument needs to be handled as per 2.4

In the case of 'default', there is no php member of the results node, but instead 'lookup_php', which should be used by the parent if the context indicates a lookup, and 'string_php' which should be used if the context indicates a string

Parameters

$res
$sub

at line 1561
Argument_QuotedString($res, $sub)

Parameters

$res
$sub

at line 1567
Argument_Null($res, $sub)

Parameters

$res
$sub

at line 1573
Argument_Boolean($res, $sub)

Parameters

$res
$sub

at line 1579
Argument_IntegerOrFloat($res, $sub)

Parameters

$res
$sub

at line 1585
Argument_Lookup($res, $sub)

Parameters

$res
$sub

at line 1597
Argument_FreeString($res, $sub)

Parameters

$res
$sub

at line 1605
match_ComparisonOperator($stack = array())

Parameters

$stack

at line 1716
match_Comparison($stack = array())

Parameters

$stack

at line 1749
Comparison_Argument($res, $sub)

Parameters

$res
$sub

at line 1762
Comparison_ComparisonOperator($res, $sub)

Parameters

$res
$sub

at line 1769
match_PresenceCheck($stack = array())

Parameters

$stack

at line 1812
PresenceCheck_Not($res, $sub)

Parameters

$res
$sub

at line 1817
PresenceCheck_Argument($res, $sub)

Parameters

$res
$sub

at line 1831
match_IfArgumentPortion($stack = array())

Parameters

$stack

at line 1862
IfArgumentPortion_STR($res, $sub)

Parameters

$res
$sub

at line 1869
match_BooleanOperator($stack = array())

Parameters

$stack

at line 1897
match_IfArgument($stack = array())

Parameters

$stack

at line 1946
IfArgument_IfArgumentPortion($res, $sub)

Parameters

$res
$sub

at line 1951
IfArgument_BooleanOperator($res, $sub)

Parameters

$res
$sub

at line 1958
match_IfPart($stack = array())

Parameters

$stack

at line 2001
match_ElseIfPart($stack = array())

Parameters

$stack

at line 2044
match_ElsePart($stack = array())

Parameters

$stack

at line 2079
match_If($stack = array())

Parameters

$stack

at line 2135
If_IfPart($res, $sub)

Parameters

$res
$sub

at line 2143
If_ElseIfPart($res, $sub)

Parameters

$res
$sub

at line 2151
If_ElsePart($res, $sub)

Parameters

$res
$sub

at line 2161
match_Require($stack = array())

Parameters

$stack

at line 2222
Require_Call($res, $sub)

Parameters

$res
$sub

at line 2237
match_CacheBlockArgument($stack = array())

Parameters

$stack

at line 2334
CacheBlockArgument_DollarMarkedLookup($res, $sub)

Parameters

$res
$sub

at line 2339
CacheBlockArgument_QuotedString($res, $sub)

Parameters

$res
$sub

at line 2344
CacheBlockArgument_Lookup($res, $sub)

Parameters

$res
$sub

at line 2351
match_CacheBlockArguments($stack = array())

Parameters

$stack

at line 2399
CacheBlockArguments_CacheBlockArgument($res, $sub)

Parameters

$res
$sub

at line 2413
match_CacheBlockTemplate($stack = array())

Parameters

$stack

at line 2631
match_UncachedBlock($stack = array())

Parameters

$stack

at line 2784
UncachedBlock_Template($res, $sub)

Parameters

$res
$sub

at line 2792
match_CacheRestrictedTemplate($stack = array())

Parameters

$stack

at line 3040
CacheRestrictedTemplate_CacheBlock($res, $sub)

Parameters

$res
$sub

at line 3046
CacheRestrictedTemplate_UncachedBlock($res, $sub)

Parameters

$res
$sub

at line 3058
match_CacheBlock($stack = array())

Parameters

$stack

at line 3294
CacheBlock__construct($res)

Parameters

$res

at line 3299
CacheBlock_CacheBlockArguments($res, $sub)

Parameters

$res
$sub

at line 3304
CacheBlock_Condition($res, $sub)

Parameters

$res
$sub

at line 3309
CacheBlock_CacheBlock($res, $sub)

Parameters

$res
$sub

at line 3314
CacheBlock_UncachedBlock($res, $sub)

Parameters

$res
$sub

at line 3319
CacheBlock_CacheBlockTemplate($res, $sub)

Parameters

$res
$sub

at line 3356
match_OldTPart($stack = array())

Parameters

$stack

at line 3466
match_N($stack = array())

Parameters

$stack

at line 3477
OldTPart__construct($res)

Parameters

$res

at line 3482
OldTPart_QuotedString($res, $sub)

Parameters

$res
$sub

at line 3492
OldTPart_CallArguments($res, $sub)

Parameters

$res
$sub

at line 3497
OldTPart__finalise($res)

Parameters

$res

at line 3504
match_OldTTag($stack = array())

Parameters

$stack

at line 3529
OldTTag_OldTPart($res, $sub)

Parameters

$res
$sub

at line 3536
match_OldSprintfTag($stack = array())

Parameters

$stack

at line 3589
OldSprintfTag__construct($res)

Parameters

$res

at line 3594
OldSprintfTag_OldTPart($res, $sub)

Parameters

$res
$sub

at line 3599
OldSprintfTag_CallArguments($res, $sub)

Parameters

$res
$sub

at line 3606
match_OldI18NTag($stack = array())

Parameters

$stack

at line 3637
OldI18NTag_STR($res, $sub)

Parameters

$res
$sub

at line 3644
match_NamedArgument($stack = array())

Parameters

$stack

at line 3674
NamedArgument_Name($res, $sub)

Parameters

$res
$sub

at line 3679
NamedArgument_Value($res, $sub)

Parameters

$res
$sub

at line 3698
match_Include($stack = array())

Parameters

$stack

at line 3775
Include__construct($res)

Parameters

$res

at line 3780
Include_Template($res, $sub)

Parameters

$res
$sub

at line 3785
Include_NamedArgument($res, $sub)

Parameters

$res
$sub

at line 3790
Include__finalise($res)

Parameters

$res

at line 3809
match_BlockArguments($stack = array())

Parameters

$stack

at line 3858
match_NotBlockTag($stack = array())

Parameters

$stack

at line 4013
match_ClosedBlock($stack = array())

Parameters

$stack

at line 4121
ClosedBlock__construct($res)

As mentioned in the parser comment, block handling is kept fairly generic for extensibility. The match rule builds up two important elements in the match result array: 'ArgumentCount' - how many arguments were passed in the opening tag 'Arguments' an array of the Argument match rule result arrays

Once a block has successfully been matched against, it will then look for the actual handler, which should be on this class (either defined or extended on) as ClosedBlock_Handler_Name(&$res), where Name is the tag name, first letter captialized (i.e Control, Loop, With, etc).

This function will be called with the match rule result array as it's first argument. It should return the php result of this block as it's return value, or throw an error if incorrect arguments were passed.

Parameters

$res

at line 4126
ClosedBlock_BlockArguments($res, $sub)

Parameters

$res
$sub

at line 4137
ClosedBlock__finalise($res)

Parameters

$res

at line 4155
ClosedBlock_Handle_Loop($res)

This is an example of a block handler function. This one handles the loop tag.

Parameters

$res

at line 4186
ClosedBlock_Handle_With($res)

The closed block handler for with blocks

Parameters

$res

at line 4207
match_OpenBlock($stack = array())

Parameters

$stack

at line 4269
OpenBlock__construct($res)

Parameters

$res

at line 4274
OpenBlock_BlockArguments($res, $sub)

Parameters

$res
$sub

at line 4285
OpenBlock__finalise($res)

Parameters

$res

at line 4303
OpenBlock_Handle_Debug($res)

This is an open block handler, for the <% debug %> utility tag

Parameters

$res

at line 4324
OpenBlock_Handle_Base_tag($res)

This is an open block handler, for the <% base_tag %> tag

Parameters

$res

at line 4335
OpenBlock_Handle_Current_page($res)

This is an open block handler, for the <% current_page %> tag

Parameters

$res

at line 4345
match_MismatchedEndBlock($stack = array())

Parameters

$stack

at line 4372
MismatchedEndBlock__finalise($res)

Parameters

$res

at line 4381
match_MalformedOpenTag($stack = array())

Parameters

$stack

at line 4459
MalformedOpenTag__finalise($res)

Parameters

$res

at line 4467
match_MalformedCloseTag($stack = array())

Parameters

$stack

at line 4524
MalformedCloseTag__finalise($res)

Parameters

$res

at line 4533
match_MalformedBlock($stack = array())

Parameters

$stack

at line 4567
match_Comment($stack = array())

Parameters

$stack

at line 4618
Comment__construct($res)

Parameters

$res

at line 4626
match_TopTemplate($stack = array())

Parameters

$stack

at line 4898
TopTemplate__construct($res)

The TopTemplate also includes the opening stanza to start off the template

Parameters

$res

at line 4912
match_Text($stack = array())

Parameters

$stack

at line 5119
Text__finalise($res)

We convert text

Parameters

$res

at line 5158
string compileString(string $string, string $templateName = "", bool $includeDebuggingComments = false, bool $topTemplate = true)

Compiles some passed template source code into the php code that will execute as per the template source.

Parameters

string $string The source of the template
string $templateName The name of the template, normally the filename the template source was loaded from
bool $includeDebuggingComments True is debugging comments should be included in the output
bool $topTemplate True if this is a top template, false if it's just a template

Return Value

string The php that, when executed (via include or exec) will behave as per the template source

Exceptions

SSTemplateParseException

at line 5237
mixed|string compileFile($template)

Compiles some file that contains template source code, and returns the php code that will execute as per that source

Parameters

$template
  • A file path that contains template source code

Return Value

mixed|string
  • The php that, when executed (via include or exec) will behave as per the template source