LobsterJoe
@LobsterJoe

Как отдать html-шаблон с переменными с помощью Symfony Response?

Вопрос такой: есть самописный блок для Concrete5 CMS, в контроллере функция, которую дёргают аяксом.

Проверяем кеш, если нет, то парсим шаблон, записываем результат в переменную,
кеширеум и отаем в Response.

public function action_article($blockId = null, $feedId = null)
    {

        $cache = \Core::make('cache/expensive'); 
        $articleData = $cache->getItem('Article/' . $feedId);

        if ($articleData->isMiss()) {
            $articleData->lock();

            // Тут поскипана часть логики
            
            $title = $post->getTitle();
            $date = $this->formatDateTime($post->getDateCreated());
            $description = substr($post->getDescription(), 0, 250) . '...';
            $content = $crawler->filter($this->captureContentFromTag)->html();
            $image = $crawler->filter($this->captureImageFromTag)->attr('src');

            ob_start();
            include('views/article.php'); // тут шаблон HTML с переменными
            $output = ob_get_clean();

            $cache->save($articleData->set($output)->expiresAfter($this->parsingResultsExpirationTime));
        } else {
            $output = $articleData->get();
        }

        $response = new Response();
        $response->headers->set('Content-Type', 'text/html');
        $response->setStatusCode(Response::HTTP_OK);
        $response->setContent($output);

        return $response;
    }


Всё это работает нормально, смущает только кусок

ob_start();
include('views/article.php'); // тут шаблон HTML с переменными
$output = ob_get_clean();


Нет ли другого способа распарсить шаблон, и сохранить результат в переменную?
И в целом, выслушаю любые замечания по коду.
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
dmitriy91
@dmitriy91
Попробуйте данный вариант:
$output = $this->render('path/to/template/template.html.twig', ['parameter_1' => $parameter1]);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы