Метод renderView
Метод renderView принадлежит классу AbstractController
и выполняет рендеринг Twig-шаблона, возвращая результат
в виде строки. В отличие от метода render, который
возвращает объект Response, данный метод возвращает
готовый HTML-код. Первым параметром передаётся имя
шаблона, вторым - массив переменных для передачи
в шаблон.
Синтаксис
$this->renderView(string $view, array $parameters = [])
Пример
Давайте отрендерим простой шаблон и вернём его содержимое
в виде строки через Response:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$html = $this->renderView('article/index.html.twig');
return new Response($html);
}
}
?>
Содержимое шаблона templates/article/index.html.twig:
<p>hello</p>
Результат выполнения кода:
<p>hello</p>
Пример
Давайте передадим переменные в шаблон через второй параметр метода:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/user/{name}', name: 'article_user')]
public function user(string $name): Response
{
$html = $this->renderView('article/user.html.twig', [
'name' => $name,
'title' => 'User page',
]);
return new Response($html);
}
}
?>
Содержимое шаблона templates/article/user.html.twig:
<h1>{{ title }}</h1>
<p>{{ name }}</p>
Результат выполнения кода для адреса /user/abcde:
<h1>User page</h1>
<p>abcde</p>
Пример
Давайте используем renderView внутри метода
для сохранения HTML в файл через file_put_contents:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/save', name: 'article_save')]
public function save(): Response
{
$html = $this->renderView('article/index.html.twig', [
'text' => 'article',
]);
file_put_contents('/tmp/page.html', $html);
return new Response('saved');
}
}
?>
Результат выполнения кода:
saved
Смотрите также
-
класс
AbstractController,
который предоставляет базовые методы контроллера -
метод
render,
который возвращает объект Response с отрендеренным шаблоном -
метод
forward,
который перенаправляет запрос другому контроллеру -
метод
json,
который возвращает JSON-ответ