thinkphp架构

模块:

Common是一个破例的公物模块,访问所有子模块从前都碰面首先加载Common模块配置文件(
Conf/config.php )和国有函数文件( Common/function.php )。

只是Common模块本身不可知经过URL直接访问。

 

配置禁止访问的模块的格局:

‘MODULE_DENY_LIST’ => array(‘Common’,’Runtime’,’Api’)

 

布允许看的模块:

‘MODULE_ALLOW_LIST’ => array(‘Home’,’Admin’,’User’)
‘DEFAULT_MODULE’ => ‘Home’

 

一味允许单模块访问:

‘MULTI_MODULE’ => false
‘DEFAULT_MODULE’ => ‘Home’

 

URL标准看:

http://serverName/index.php/模块/控制器/操作

 

 

绑定模块:

define(‘BIND_MODULE’, ‘Home’)

绑定控制器:

define(‘BIND_CONTROLLER’,’Index’)

效果:

http://serverName/index.php/Home/Index/index 
=>
  http://serverName/home.php/index

 

 


URL:

 

URL不分轻重缓急写:

‘URL_CASE_INSENSITIVE’ => true

 

默认URL看设置:

DEFAULT_MODULE’ => ‘Home’, // 默认模块
‘DEFAULT_CONTROLLER’ => ‘Index’, // 默认控制器名称
‘DEFAULT_ACTION’ => ‘index’, // 默认操作名称

效果:

http://serverName/index.php 
=> http://serverName/index.php/Home/Index/index

 

URL访问普通形式:

默认URL GET方法访问控制:

‘VAR_MODULE’ => ‘m’, // 默认模块获取变量
‘VAR_CONTROLLER’ => ‘c’, // 默认控制器获取变量
‘VAR_ACTION’ => ‘a’,     // 默认操作获取变量

看举例:

http://123.56.183.226/?m=Home&c=search&a=detail&case_id=1234

 

URL访问PATHINFO模式:

http://123.56.183.226/index.php/home/search/detail/3329061/

混模式:

http://123.56.183.226/index.php/home/search/detail/?case_id=1234

 

pathinfo格局下帮忙针对分隔符的装:

‘URL_PATHINFO_DEPR’=>’-‘

(即使就无异久我骨子里测试出了碰问题,不过盖是者法)

 

URL访问REWRITE模式:

倘使Apache则用以输入文件之同级添加.htaccess文件,内容如下:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

 这样看的下不欲写index.php

图片 1

 

URL访问兼容形式:

http://localhost/?s=/home/user/login/var/value

此类URL适用于优秀条件,当然为堪当配备文件被配备有变量修改设置

 


 

Model:

多层MVC:think
php援助多层MVC的统筹,也即是管M层划分成Model、Logic、瑟维斯(Service)层。

使用D函数:

D(‘User’) //实例化UserModel
D(‘User’,’Logic’) //实例化UserLogic
D(‘User’,’Service’) //实例化UserService

 默认的M层是Model,当然这也可改:

‘DEFAULT_M_LAYER’ => ‘Logic’, // 更改默认的范层名称为Logic

转后,实例化的早晚要转移成为:
D(‘User’) //实例化UserLogic
D(‘User’,’Model’) //实例化UserModel
D(‘User’,’Service’) //实例化UserService

D函数用来实例化M层

 

View:

图层由模板与模板引擎组成,在模板被好直接动用PHP代码,模板引擎的统筹会未来头讲述,通过驱
动也可以协理其他第三正在的沙盘引擎。

 

‘DEFAULT_V_LAYER’ => ‘Mobile’, // 默认的视图层名称改变为Mobile

 

Controler:

ThinkPHP的决定器层由骨干控制器工作控制器组成。

中央控制器由网之中的App类完成,负责运用(包括模块、控制器和操作)的调度控制,包括HTTP请求拦截与转化、加载配置当。

作业控制器则是因为用户定义的决定器类完成。

冲多层MVC的筹划,控制器也可装也多交汇。

大多重叠业务控制器的贯彻原理与模型的分支类似,例如业务控制器和波控制器:

Controller/UserController //用于用户之作业逻辑控制及调度
伊芙nt/User伊芙(Eve)nt //用于用户之轩然大波响应操作

 一般而言,大家知晓,在配备文件被,有这样同样桩:

‘DEFAULT_C_LAYER’ => ‘Controler’, // 默认的主宰器层

这样,每当多重叠MVC中,C层只有Controler才会因此URL访问,其他的必调用内的A函数调用(也可毫无A函数)。

 

倘若有以下定义:

访问控制器 Home/Controller/UserController.class.php 定义如下:
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller{
}
事件控制器 Home/伊芙nt/User伊夫nt.class.php 定义如下:
namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller{
}

 

UserControler是好透过URL访问的,而User伊芙nt是免可以的。

User伊芙nt只可中调用:

A(‘User’,’Event’);

 


CBD模式:

think php 引入的CBD的概念,核心Core+行为Behavior+驱动Driver架构。

自底层起先,框架就动用主旨+行为+驱动之架构连串。

着力关键概括有规矩配置文件和因class.php结尾的接近;

使重要包括有Driver库;

行为是有血有肉的动作,行为的动作会于标签呢于拦住下来做拍卖;

 

行为类的概念:

 

 

 

namespace Home\Behavior;
class TestBehavior 
{
//行为扩展的执行入口必须是run
public function run(&$params){
    if(C('TEST_PARAM')) {
        echo 'RUNTEST BEHAVIOR '.$params;
    }
}
}

 

有关行为绑定请参考官方文档。

 


连接下去介绍取名空间

命名空间可以使得解决模块顶牛之题材。

namespace Org\Util;
class File {
}

$class=new \Org\Util\File();

网会自行加载 ThinkPHP/Library/Org/Util/File.class.php 文件。

Library目录下也根本命名空间,只需要给出类名就是可以自行加载。

并且,Library目录下边可以实现命名空间活动加载。(不用use)

 

除却Library目录上面的命名空间之外,大家还足以注册外的根命名空间,例如:
‘AUTOLOAD_NAMESPACE’ => array(
‘My’ => THINK_PATH.’My’,
‘One’ => THINK_PATH.’One’)  

 


 类库映射:

命名类库映射分外给被类公事定义了一个号,效率会较命名空间一定又快速,例如:

Think\Think::addMap(‘Think\Log’,THINK_PATH.’Think\Log.php’);
Think\Think::addMap(‘Org\Util\Array’,THINK_PATH.’Org\Util\Array.php’);

 注意:类库映射key值不需要为\开头

 

 



自行加载的事先级:

1.
论断是否生注册了Test\MyClass类库映射,假如来则自动加载类库映射定义的文本;

  1. 判断是否有Library/Test目录,有则因该目录也发端目录加载;
  2. 看清是否有登记Test根命名空间,有则以报之目也开始目录加载;
  3. 如以上还不起,则因为Test为模块目录举行初阶目录加载;
    下一场以点拿到到的起始目录加载命名空间对应路径的文书;

精神上2、3且是根本命名空间。所以可以认为,加载的一一是类库映射、根命名空间最后才是现阶段模块

 


导入第三正在类库:

命名规范、调用方法以及眼前的命名空间受到牵线的差距不充足。需要提出的是此调用可能使用到import

函数、Vendor函数,而毫无简单用名字空间。

 

 


Web流程:

  1. 用户URL请求
  2. 调用应用入口文件(通常是网站的index.php)
  3. 载入框架入口文件(ThinkPHP.php)
  4. 笔录初叶运行时以及内存开销
  5. 系统常量判断和定义
  6. 载入框架指导类(Think\Think)并实施Think::start方法开展应用起初化
  7. 安装错误处理机制与机关加载机制
    8.
    调用Think\Storage类举行仓储起头化(由STORAGE_TYPE常量定义存储类型)
  8. 布形式下要有用编译缓存文件则直接加载(直接跨越反至步骤22)
    10.
    读取应用情势(由APP_MODE常量定义)的概念文件(以下为普通格局为条例表达)
  9. 加载当前应用形式定义的中坚文件(普通情势是
    ThinkPHP/Mode/common.php)
  10. 加载惯例配置文件(普通形式是 ThinkPHP/Conf/convention.php)
  11. 加载应用配置文件(普通格局是 Application/Common/Conf/config.php)
  12. 加载系统别名定义
  13. 看清连读取应用别名定义文件(普通格局是
    Application/Common/Conf/alias.php)
  14. 加载系统作为定义
  15. 判断连读取应用行为定义文件(普通形式是
    Application/Common/Conf/tags.php)
  16. 加载框架底层语言包(普通格局是 ThinkPHP/Lang/zh-cn.php)
  17. 尽管是部署情势则变应用编译缓存文件
  18. 加载调试形式系统部署文件(ThinkPHP/Conf/debug.php)
  19. 看清连读取应用之调剂配置文件(默认是
    Application/Common/Conf/debug.php)
    22.
    判定用状态并读取状态配置文件(假如APP_STATUS常量定义不为空的言语)
    23.
    检测采取目录结构并自动生成(假设CHECK_APP_DIR配置开启并且RUNTIME_PATH目录不存在的情
    况下)
  20. 调用Think\App类的run方法启动以
  21. 动伊始化(app_init)标签位侦听并尽绑定行为
  22. 判断连加载动态配置以及函数文件
  23. 调用Think\Dispatcher::dispatch方法开展URL请求调度
  24. 自动识别兼容URL形式与命令行格局下的$_SERVER[‘PATH_INFO’]参数
    29.
    检测域名部署以及姣好模块和控制器的绑定操作(APP_SUB_DOMAIN_DEPLOY参数开启)
  25. 浅析URL地址被之PATH_INFO信息
  26. 获取请求的模块音讯
  27. 检测模块是否在和兴看
  28. 判断连加载模块配置文件、别名定义、行为定义和函数文件
  29. 看清连加载模块的动态配置和函数文件
  30. 模块的URL情势判断
  31. 模块的路由检测(URL_ROUTER_ON开启)
  32. PATH_INFO处理(path_info)标签位侦听并施行绑定行为
  33. URL后缀检测(URL_DENY_SUFFIX以及URL_HTML_SUFFIX处理)
  34. 获当前控制器和操作,以及URL其他参数
  35. URL请求调度就(url_dispatch)标签位侦听并施行绑定行为
  36. 动用起来(app_begin)标签位侦听并推行绑定行为
    42.
    调用SESSION_OPTIONS配置参数举行Session开首化(假使不是命令行形式)
  37. 因请求执行控制器方法
  38. 设控制器不存在则检测空控制器是否在
  39. 控制器起头(action_begin)标签位侦听并实施绑定行为
    46.
    默认调用系统的ReadHtmlCache行为读取静态缓存(HTML_CACHE_ON参数开启)
  40. 看清连调用控制器的_initialize伊始化方法
  41. 认清操作方法是否有,即便未有则检测是否定义空操作方法
  42. 判定坐操作方法是否定义,有的话执行
  43. Action参数绑定检测,自动匹配操作方法的参数
  44. 要是爆发模版渲染(调用控制器display方法)
  45. 视图初始(view_begin)标签位侦听并履行绑定行为
  46. 调用Think\View的fetch方法分析并收获模版内容
  47. 自动识别当前大旨和稳定模版文件
  48. 视图解析(view_parse)标签位侦听并履行绑定行为
    ThinkPHP3.2.3完全开发手册
    本文档以 看云 构建 – 46 –
  49. 默认调用内置ParseTemplate行为分析模版(普通情势下)
  50. 模版引擎解析模版内容后变更模版缓存
  51. 模版过滤替换(template_filter)标签位侦听并尽绑定行为
  52. 默认调用系统的ContentReplace行为展开模版替换
  53. 输出内容过滤(view_filter)标签位侦听并施行绑定行为
    61.
    默认调用系统的WriteHtmlCache行为写副静态缓存(HTML_CACHE_ON参数开启)
  54. 调用Think\View类的render方法输出渲染内容
  55. 视图停止(view_end)标签位侦听并尽绑定行为
  56. 认清后置操作方法是否定义,有的言语执行
  57. 控制器停止(action_end)标签位侦听并施行绑定行为
  58. 行使了(app_end)标签位侦听并举行绑定行为
    67.
    尽系统的ShowPageTrace行为(SHOW_PAGE_TRACE参数开启并且不是AJAX请求)
  59. 日志音信囤积写副

图片 2

相关文章