lithium\template\View::render()
Executes a named rendering process by running each process step in sequence and aggregating
the results. The View
class comes with 3 built-in processes: 'all'
, 'template'
, and
'element'
. The 'all'
process is the default two-step rendered view, where a template is
wrapped in a layout containing a header and footer.
Parameters
-
string
$process
A named set of rendering steps defined in the
$_processes
array. -
array
$data
An associative array of data to be rendered in the set of templates.
-
array
$options
Options used when rendering. Available keys are as follows:
'type'
string: The type of content to render. Defaults to'html'
.'layout'
string: The name of the layout to use in the default two-step rendering process. Defaults tonull
.'template'
string: The name of the template to render. Defaults tonull
.'context'
array: An associative array of information to inject into the rendering context.'paths'
array: A nested array of paths to use for rendering steps. The top-level keys should match the'path'
key in a step configuration (i.e.:'template'
,'layout'
, or'element'
), and the second level is an array of path template strings to search (can be a string if there's only one path). These path strings generally take the following form:'{:library}/views/{:controller}/{:template}.{:type}.php'
. These template strings are specific to theFile
loader, but can take any form useful to the template loader being used.
Returns
stringReturns the result of the rendering process, typically by rendering a template
first, then rendering a layout (using the default configuration of the 'all'
process).
Source
public function render($process, array $data = [], array $options = []) {
$defaults = [
'type' => 'html',
'layout' => null,
'template' => null,
'context' => [],
'paths' => [],
'data' => []
];
$options += $defaults;
$data += $options['data'];
$paths = $options['paths'];
unset($options['data'], $options['paths']);
$params = array_filter($options, function($val) { return $val && is_string($val); });
$result = null;
foreach ($this->_process($process, $params) as $name => $step) {
if (isset($paths[$name]) && $paths[$name] === false) {
continue;
}
if (!$this->_conditions($step, $params, $data, $options)) {
continue;
}
if ($step['multi'] && isset($options[$name])) {
foreach ((array) $options[$name] as $value) {
$params[$name] = $value;
$result = $this->_step($step, $params, $data, $options);
}
continue;
}
$result = $this->_step((array) $step, $params, $data, $options);
}
return $result;
}