laravel 静态化的问题
因为我在写面向对象式实现静态化,部分代码先贴出来了
模板代码 , 视图 :app.template.article
@extends('app.app')
@section('body')
{title}
<hr>
{content}
@endsection
AppLibs 单对象静态文件静态化方法
trait Staticize
{
/**
* html 生成目录
* @var string
*/
private $html_folder = "content";
/**
* 静态化生成html文件
* @param $obj 静态的对象
* @param null $view_name 模板view的位置 xxx.xx.xx等格式
* @param null $save_path 存储生成的目录
* @param null $path_format 路径规则
*/
public function staticizeToHtml($obj,$view_name=null,$save_path=null,$path_format=null){
$template = view($view_name)->__toString();
preg_match_all('/{\S+}/i', $template, $matches);
foreach ($matches[0] as $key => $value) {
$column=preg_replace('/{|}/i','',$value);
$template = preg_replace('/' . $value . '/', $obj->$column, $template);
}
ob_start();
/* 创建时间 */
$created = $obj->created_at->format('Y-m-d');
/* 存储目录 */
if($save_path==null)
$savePath=$this->html_folder;
$saveFolder = "$savePath/$created";
/* 唯一 */
$id=$obj->id;
/* 如果存储目录不存在,建设存储目录,最后的true 允许创建多级目录 */
if (!is_dir($saveFolder))
mkdir($saveFolder, 0777, true);
/* 存储路径 */
$savePath = "$saveFolder/content_$id.html";
file_put_contents($savePath,$template);
}
}
控制器的调用
class ArticleStaticizeController extends Controller
{
use Staticize;
/* 存储文件规则 */
private $html_folder = "content";
/**
* 手动多选的静态化
* @param Request $request
*/
public function articleMultiStaticize(Request $request)
{
$id_list=$request->get('id_list');
$articles = Article::where(['status' => 1])->whereIn('id',$id_list)->get();
/* 使用替换规则,页面上的关键字进行替换 */
foreach ($articles as $article) {
$this->staticizeToHtml($article, 'app.template.article');
}
}
}
就这样单对象的静态化方案成功了,有了模板以后,使用正则表达式,替换了动态数据值,下一步我要静态化列表页面,数据库有18200条稿件数据,这个列表页如何实现纯静态化呢?要生成html文件。