欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel静态化上遇到了一些问题,求好建议

laravel静态化上遇到了一些问题,求好建议

laravel 静态化的问题

因为我在写面向对象式实现静态化,部分代码先贴出来了

模板代码 , 视图 :app.template.article

@extends('app.app')
@section('body')
    {title}
    <hr>
    {content}
@endsection

App\Libs 单对象静态文件静态化方法

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文件。

来自 https://www.codecasts.com/discuss/php/laravel-has-encountered-some-problems-in-the-static-process-an...

普通分类: