Вопрос такой: есть самописный блок для 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();
Нет ли другого способа распарсить шаблон, и сохранить результат в переменную?
И в целом, выслушаю любые замечания по коду.