为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 Varnish ESI 与模块化 PHP 模板系统一起使用

如何将 Varnish ESI 与模块化 PHP 模板系统一起使用

PHP
墨色风雨 2022-01-08 16:28:08
我正在寻找将清漆实施到数据重/以用户为中心的网站中。如何使用使用 php 包含 html 模板的系统设置 ESI?我目前使用一个自定义 php 模板系统(类似于 MVC 设计模式),其工作方式如下:发出页面请求 -> php 计算逻辑 -> php 包含 html 模板页面并填写变量 -> 页面输出我只见过主要用于 html 页面的 esi 标签,包括 php 片段。像下面的代码:<HTML><BODY>The time is: <esi:include src="/php-includes/date.php"/>at this very moment.</BODY></HTML>但是可以反过来做吗?例如,在 php 页面中包含 html 片段的 esi 标签?与此类似:<?php//logic here$content = "this will be displayed on the content page"include("templates/header.html.php"); //esi would go here since page is static contentinclude("templates/content.html.php"); //no esi here, since page is dynamic contentinclude("templates/footer.html.php"); //esi would go here since page is static content?>
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您只需要为您的特定 MVC 实现创建一种“ESI”渲染器,如在 中/esi.php?template=foo,然后在内部类似:


... whatever you need to boostrap your app in order to render a template ....

include("templates/$template.html.php");

.... exit so no header/fooder stuff is rendered, only template HTML of interest

当然不是那么简单,但简而言之就是类似的事情。


然后,我将在每个模板文件顶部放置一些逻辑以发出 HTML(如果由呈现esi.php或 ESI“功能”处于禁用状态)或<esi仅标记。


所以例如templates/header.html.php可以有(伪代码):


if esi (detect by checking request_uri to be esi.php) then echo '<esi /esi.php?template=header?somevar-from-parent=...'; return

---existing code--


查看完整回答
反对 回复 2022-01-08
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信