fastadmin的页面是如何生成的?

第一步:

访问URL

http://www.fastadmin.cc/admin/mydir/test/index?addtabs=1 

 

对应的方法是admin模块,controller文件夹下的mydir文件夹下面的Test.php控制器,Test.php里面的index方法。但是打开Test.php却没有index方法,那就看Test类的父类Backend类,可是Backend类也没有,但是Backend有一句代码

1
load_trait('library/traits/Backend');

  

打开application/admin/library/traits/Backend.php,找到了。

复制代码
复制代码
/**
     * 查看
     */
    public function index()
    {
        //设置过滤方法
        $this->request->filter(['strip_tags', 'htmlspecialchars']);
        if ($this->request->isAjax())
        {
            //如果发送的来源是Selectpage,则转发到Selectpage
            if ($this->request->request('pkey_name'))  // 疑问1:pkey_name是什么
            {
                return $this->selectpage(); // 疑问2:selectpage方法是干什么的
            }
            list($where, $sort, $order, $offset, $limit) = $this->buildparams(); // 疑问3: buildparams方法是干嘛的?
            $total = $this->model
                    ->where($where)
                    ->order($sort, $order) // 疑问4:order怎么有两个参数,是如何工作的?
                    ->count();

            $list = $this->model
                    ->where($where)
                    ->order($sort, $order)
                    ->limit($offset, $limit)
                    ->select();

            $result = array("total" => $total, "rows" => $list);

            return json($result);
        }
        return $this->view->fetch(); // 访问url的时候,就有数据了,那明显是执行了 if ($this->request->isAjax())这个分支了啊,可是get怎么会是ajax呢?难道是页面加载了自动发送ajax请求?
}
复制代码
复制代码

 第二步:url访问index方法,显然先执行的是 return $this->view->fetch();   // fetch 的作用是:获取和解析模板内容 用于输出

 那么,接下去就是获取index方法对应的admin/view/mydir/index.html这个模板了

复制代码
复制代码
<div class="panel panel-default panel-intro">
    {:build_heading()}

    <div class="panel-body">
        <div id="myTabContent" class="tab-content">
            <div class="tab-pane fade active in" id="one">
                <div class="widget-body no-padding">
                    <div id="toolbar" class="toolbar">
                        {:build_toolbar()}
                        <div class="dropdown btn-group">
                            <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
                            <ul class="dropdown-menu text-left" role="menu">
                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
                            </ul>
                        </div>
                    </div>
                    <table id="table" class="table table-striped table-bordered table-hover" width="100%">
                    </table>
                </div>
            </div>

        </div>
    </div>
</div>
复制代码
复制代码

 

获取到了模板内容,接下去就是解析了。需要解析的只有四个:

复制代码
复制代码
{:build_heading()}

{:build_toolbar()}

{:__('More')}

{:__('Set to normal')}

{:__('Set to hidden')}
复制代码
posted @   飞龙在生  阅读(618)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示