On this page

Application Integration

Stand-Alone

The view and all view-helpers of laminas-view can also be used stand-alone.

The View

The examples uses the following directory structure:

./
|-- public/
|   `-- index.php
`-- templates/
    |-- index.phtml
    `-- layout.phtml

Basic Example

Setup

Create a renderer, set a resolver for templates and initialize the view in public/index.php:

// Create template resolver
$templateResolver = new Laminas\View\Resolver\TemplatePathStack([
    'script_paths' => [__DIR__ . '/../templates'],
]);

// Create the renderer
$renderer = new Laminas\View\Renderer\PhpRenderer();
$renderer->setResolver($templateResolver);

// Initialize the view
$view = new Laminas\View\View();
$view->getEventManager()->attach(
    Laminas\View\ViewEvent::EVENT_RENDERER,
    static function () use ($renderer) {
        return $renderer;
    }
);

Create View Script

Create a view script in templates/index.phtml:

<?php
/**
 * @var Laminas\View\Renderer\PhpRenderer $this
 * @var string                            $headline
 */
?>
<h1><?= $headline ?></h1>

Create View Model and render Output

Extend the script in public/index.php to add a view model:

$viewModel = new Laminas\View\Model\ViewModel(['headline' => 'Example']);
$viewModel->setTemplate('index');

// Set the return type to get the rendered content
$viewModel->setOption('has_parent', true);

echo $view->render($viewModel); // <h1>Example</h1>
Show full code example
<?php

require_once __DIR__ . '/../vendor/autoload.php';

// Create template resolver
$templateResolver = new Laminas\View\Resolver\TemplatePathStack([
    'script_paths' => [__DIR__ . '/../templates'],
]);

// Create the renderer
$renderer = new Laminas\View\Renderer\PhpRenderer();
$renderer->setResolver($templateResolver);

// Initialize the view
$view = new Laminas\View\View();
$view->getEventManager()->attach(
    Laminas\View\ViewEvent::EVENT_RENDERER,
    static function () use ($renderer) {
        return $renderer;
    }
);

// Create view model
$viewModel = new Laminas\View\Model\ViewModel(['headline' => 'Example']);
$viewModel->setTemplate('index');

// Set the return type to get the rendered content
$viewModel->setOption('has_parent', true);

// Render
echo $view->render($viewModel);

Example with Layout

Add Layout Script

Create a new file templates/layout.phtml and add the following content:

<?php
/**
 * @var Laminas\View\Renderer\PhpRenderer $this
 * @var string                            $content
 */
?>
<body>
<?= $content ?>
</body>

Create Layout Model and render Output

Update the script in public/index.php to add a view model for layout:

// Create layout model
$layout = new Laminas\View\Model\ViewModel();
$layout->setTemplate('layout');

// Set the return type to get the rendered content
$layout->setOption('has_parent', true);

// Add previous view model as child
$layout->addChild($viewModel);

// Render
echo $view->render($layout);
Show full code example
<?php

require_once __DIR__ . '/../vendor/autoload.php';

// Create template resolver
$templateResolver = new Laminas\View\Resolver\TemplatePathStack([
    'script_paths' => [__DIR__ . '/../templates'],
]);

// Create the renderer
$renderer = new Laminas\View\Renderer\PhpRenderer();
$renderer->setResolver($templateResolver);

// Initialize the view
$view = new Laminas\View\View();
$view->getEventManager()->attach(
    Laminas\View\ViewEvent::EVENT_RENDERER,
    static function () use ($renderer) {
        return $renderer;
    }
);

// Create view model
$viewModel = new Laminas\View\Model\ViewModel(['headline' => 'Example']);
$viewModel->setTemplate('index');

// Create layout model
$layout = new Laminas\View\Model\ViewModel();
$layout->setTemplate('layout');

// Set the return type to get the rendered content
$layout->setOption('has_parent', true);

// Add previous view model as child
$layout->addChild($viewModel);

// Render
echo $view->render($layout);

View Helpers

Setup

Create the renderer:

$renderer = new Laminas\View\Renderer\PhpRenderer();

Using Helper

echo $renderer->doctype(Laminas\View\Helper\Doctype::HTML5); // <!DOCTYPE html>