why: More simple ?
<?php
declare(strict_types=1);
namespace App\Controller;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Yiisoft\View\WebView;
final class SiteController extends AbstractController
{
public function index(WebView $webView, ServerRequestInterface $request): ResponseInterface
{
return $this->responseFactory->createResponse(
$this->renderContent(
'//views/site/index',
[
'csrf' => $request->getAttribute('csrf_token')
]
)
);
}
}
abstract class AbstractController implements ViewContextInterface
{
private WebView $view;
protected Aliases $aliases;
protected DataResponseFactoryInterface $responseFactory;
public function __construct(
DataResponseFactoryInterface $responseFactory,
Aliases $aliases,
WebView $view
) {
$this->responseFactory = $responseFactory;
$this->aliases = $aliases;
$this->view = $view;
}
protected function renderContent(string $view, array $parameters = []): string
{
return $this->view->render(
'//layout/main',
array_merge(
[
'content' => $this->view->render($view, $parameters, $this)
],
$parameters
),
$this
);
}
public function getViewPath(): string
{
return $this->aliases->get('
@views');
}
}