1.建议该方法放在BaseController中,方便全局调用
//静态模板生成目录
protected $staticHtmlDir = "";
//静态文件
protected $staticHtmlFile = "";
/**
* 判断是否存在静态
*
* @param string $key 静态文件名称,传入,方便出问题时候查看
* @param string $index 静态文件存放一级文件夹
*/
public function beforeBuild($key = "",$index = "index") {
//生成静态
$this->staticHtmlDir = "html".DS.$index.DS;
//静态文件存放地址
$this->staticHtmlFile = $this->staticHtmlDir . $key .'.html';
//目录不存在,则创建
if(!file_exists($this->staticHtmlDir)){
mkdir($this->staticHtmlDir, 0777, true);
chmod($this->staticHtmlDir, 0777);
}
//静态文件存在,并且没有过期
if(file_exists($this->staticHtmlFile) && filectime($this->staticHtmlFile)>=time()-60*60*24*5) {
header("Location:/" . $this->staticHtmlFile);
exit();
}
}
/**
* 开始生成静态文件
*
* @param $html
*/
public function afterBuild($html) {
if(!empty($this->staticHtmlFile) && !empty($html)) {
if(file_exists($this->staticHtmlFile)) {
\unlink($this->staticHtmlFile);
}
if(file_put_contents($this->staticHtmlFile,$html)) {
header("Location:/" . $this->staticHtmlFile);
exit();
}
}
}
2. Controller 中调用
class Index extends BaseController
{
public function index()
{
//判断静态界面是否存在
$this->beforeBuild("mobile_index", "mobile");
$template = 'template/mobile/default/' . $this->request->controller() . '/index.html';
// TODO 需要填入的模板数据
$noticeList = [];
View::assign('noticeList', $noticeList);
$html = View::fetch($template);
//生成静态界面
$this->afterBuild($html);
return $html;
}
}
3.生成的静态文件地址:public/html/