ThinkPHP源码阅读1-------访问流程

ThinkPHP访问流程在手册1.11系统流程里就有介绍,我阅读的ThinkPHP的版本是3.1.3,大家可以看下手册,基本的流程也有,现在就是详细去介绍一下ThinkPHP的访问流程.(调试模式下的,在部署模式下,会把中间的URL解析,文件加载之类的,都封装到一个文件里)

1.入口文件(index.php)

入口文件最常见得就是index.php,而在这里可以定义项目名称,路径,缓存文件存放路径之类的.最后要加载Thinkphp/ThinkPHP.php

指向下一个文件的地方是require ‘ThinkPHP/ThinkPHP.php‘;

2.ThinkPHP/ThinkPHP.php

这个文件定义基本的系统目录常量,框架引擎判断,以及部署模式和调试模式的判断

指向下一个文件的地方是 require THINK_PATH.‘Common/runtime.php‘;

3.runtime.php(~runtime.php)

PHP环境判断,URL定义,项目目录常量定义,核心文件加载,项目目录生成.

指向下一个文件的地方是Think::Start();

4.Think.class.php

错误方式定义,异常定义,设置自动加载,缓存配置参数,语言参数等

App::run();

5.App.class.php

设置时区,加载动态的项目公共文件和配置文件,一些系统常量的定义,如(IS_POST)等,POST,GET等传值过滤,

指向下一个文件的地方是Dispatcher::dispatch();在App.class.php的第38行

6.Dispatcher.class.php

URL解析,获取分组,模块,操作名,包括URL四种方式的详细定义,URL路由都在这里定义的.

解析完成以后回到App.class.php并且执行App.exec

7.App.class.php   App::exec

执行应用程序,包括前置和后置操作执行,当前方法执行,以及空模块判断,(如IndexAction.class.php等,就会在这里直接执行)

在执行IndexAction.class.php的时候,有extends继承Action.class.php

8.Action.class.php基类

实例化视图类 赋值,传值给View,获取Action,ajax判断,这里面的方法很多,值得仔细研究下.

在调用assign,display,show等方法的时候,会到View中操作.

9.View.class.php 视图类

包括获取IndexAction.class.php中定义的变量,以及解析模板,输出模板等功能

执行下一文件的方法  tag(‘view_parse‘,$params);在View.class.php View::fetch的方法中.

10.  ParseTemplateBehavior.class.php   模板解析

其实是对缓存的判断以及对采用哪种模板引擎去解析模板.

在$tpl = Think::instance(‘ThinkTemplate‘);     在第62行

11. ThinkTemplate.class.php     ThinkPHP的模板解析类

这里才是真正得模板解析,包括对系统标签的解析,以及对自定义标签的判断,解析完成以后直接放入缓存然后include

ThinkPHP源码阅读1-------访问流程

时间: 2024-10-27 13:46:20

ThinkPHP源码阅读1-------访问流程的相关文章

ThinkPHP源码阅读2-----C函数配置文件详解

ThinkPHP的配置非常灵活,可自定义加载.大概看了一下,一共有这几个地方会加载配置文件,方便以后的读取 /** * 获取和设置配置参数 支持批量定义 * * @param string|array $name * 配置变量 * @param mixed $value * 配置值 * @return mixed */ function C($name = null, $value = null) { static $_config = array (); // 无参数时获取所有 if (emp

ThinkPHP源码阅读3------行为扩展

ThinkPHP的核心采用的框架模式是CBD,也就是核心Core+行为Behavior+驱动Driver,核心也就是整个框架模式的核心,大部分都是一些基类,去规定规则,Behavior是行为,就是在指定的地方调用来完成一些特定的行为功能,而Driver驱动就类似cache缓存驱动,mysqldb 数据库驱动等,完成功能 行为在手册的13.1中说的很详细.我只去写一些实例.调用行为的方法. 调用方法是tags() /** * 处理标签扩展 * @param string $tag * 标签名称 *

CI框架源码阅读笔记1 - 环境准备、基本术语和框架流程

最开始使用CI框架的时候,就打算写一个CI源码阅读的笔记系列,可惜虎头蛇尾,一直没有行动.最近项目少,总算是有了一些时间去写一些东西.于是准备将之前的一些笔记和经验记录下来,一方面权作备忘,另一方面时刻提醒自己:借鉴和学习才有出路,忘记过去意味着背叛! 基本术语说明 在本文开始之前,有必要对文中反复出现的术语做一个简单的说明,如果你对这一部分已经熟谙,完全可以略过.本文中反复出现和提及的术语包括: 前端控制器(Front Controller): 用于集中控制用户的所有请求的组件,将用户的请求发

Struts2源码阅读(一)_Struts2框架流程概述

1. Struts2架构图  当外部的httpservletrequest到来时 ,初始到了servlet容器(所以虽然Servlet和Action是解耦合的,但是Action依旧能够通过httpservletrequest取得请求参数), 然后通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和 Dispatcher:FilterDispatcher主要通过AcionMapper来决定需要调用哪个Actio

Caddy源码阅读(二)启动流程与 Event 事件通知

Caddy源码阅读(二)启动流程与 Event 事件通知 Preface Caddy 是 Go 语言构建的轻量配置化服务器.https://github.com/caddyserver/caddy Caddy 整个软件可以说是由不同的 插件 堆砌起来的.自己本身仅提供 Plugin 的注册运行逻辑和 Server 的监听服务功能. 学习 caddy 的源码,实际上是学习 如何构建一个 松耦合的 抽象 Plugin 设计,即模块化插拔的做法. 所以我们的源码阅读,围绕 Caddy 为 Plugin

Mybatis源码阅读之--整体执行流程

Mybatis执行流程分析 Mybatis执行SQL语句可以使用两种方式: 使用SqlSession执行update/delete/insert/select操作 使用SqlSession获得对应的Mapper,然后调用mapper的相应方法执行语句 其中第二种方式获取Mapper的流程在前面已经解析过,请查看文章Mybatis源码阅读之--Mapper执行流程 其实这个方法最后的MapperMthod也是调用SqlSession的相应方法执行增删该的操作,这边文章主要介绍SqlSession执

Mina 源码阅读:Server端基于NIO的处理流程

源码面前,了无秘密.继之前阅读了Prototype.Spring.Tomcat.以及JDK的部分.Digester等等源码之后,学习一门技术,了解源码成了必备流程.也深深的感受到了源码面前,了无秘密的含义,同时也体会到它给我带来的好处.同时,也希望所有开发者,不论前端后端,如果有时间的话,都尽量看看源码吧. 接下来进入正题,这里要对Mina流程做一个分析.因为是指对NIO流程做了分析,所以这里说的也是NIO的执行流程. 先看一下Mina中主要类的大致结构: 接下来看看Mina的整个生命周期: 1

【原】FMDB源码阅读(一)

[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于FMDB组件我是一点都没用过.好在FMDB源码中的main.m文件提供了大量的示例,况且网上也有很多最佳实践的例子,我就不在这献丑了.我们先从一个最简单的FMDB的例子开始: // 找到用户目录下的Documents文件夹位置 NSString* docsdir = [NSSearchPathFor

CI框架源码阅读笔记4 引导文件CodeIgniter.php

到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.com/usr/reg 经过引导文件,实际上会交给Application中的UsrController控制器的reg方法去处理. 这之中,CodeIgniter.php做了哪些工作?我们一步步来看. 1.    导入预定义常量.框架环境初始化 之前的一篇博客(CI框架源码阅读笔记2 一切的入