This library provides templates rendering abstraction supporting layout-view-subview hierarchy, custom renderers with PHP-based as default and more. It is used in Yii Framework but is supposed to be usable separately.
- PHP 7.4 or higher.
The package could be installed via composer:
composer require yiisoft/view --prefer-dist
The package provides two use cases for managing view templates:
- Basic functionality for use in any environment.
- Advanced functionality for use in a WEB environment.
While being immutable and, by itself, stateless, both View
and WebView
services have sets of stateful and mutable
data.
View
service:
- parameters,
- blocks,
- theme,
- locale.
WebView
service:
- parameters,
- blocks,
- theme,
- locale,
- title,
- meta and link tags,
- JS/CSS strings,
- JS/CSS files.
The state of View
and WebView
is not cloned when the services are cloned. So when
using with*()
, both new and old instances are sharing the same set of stateful mutable data. It allows, for example,
to get WebView
via type-hinting in a controller and change context path:
final class BlogController {
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view->withContextPath(__DIR__.'/views');
}
}
... and then register CSS in a widget:
final class LastPosts extends Widget
{
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view;
}
protected function run(): string
{
...
$this->view->registerCss('.lastPosts { background: #f1f1f1; }');
...
}
}
You can change the locale by using setLocale()
, which will be applied to all other instances that used current state
including existing ones. If you need to change the locale only for a single instance, you can use the immutable
withLocale()
method. Locale will be applied to all views rendered within views with render()
calls.
Example with mutable method:
final class LocaleMiddleware implements MiddlewareInterface
{
...
private WebView $view;
...
public function __construct (
...
WebView $view
...
) {
$this->view = $view;
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
...
$this->view->setLocale($locale);
...
}
}
Example with immutable method:
final class BlogController {
private WebView $view;
public function __construct (WebView $view) {
$this->view = $view;
}
public function index() {
return $this->view->withLocale('es')->render('index');
}
}
To get a deep cloned View
or WebView
use withClearedState()
:
$view = $view->withClearedState();
- yiisoft/yii-view - a wrapper that is used in Yii Framework. Adds additional functionality for a WEB environment and compatibility with PSR-7 interfaces.
- yiisoft/view-twig - an extension that provides a view renderer that will allow you to use the Twig view template engine, instead of the default PHP renderer.
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
The Yii View Rendering Library is free software. It is released under the terms of the BSD License.
Please see LICENSE
for more information.
Maintained by Yii Software.