博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thinkphp5.1源码阅读
阅读量:4991 次
发布时间:2019-06-12

本文共 2781 字,大约阅读时间需要 9 分钟。

主要流程

 

1 \public\index.php

require __DIR__ . '/../thinkphp/start.php';

2 \thinkphp\start.php

require __DIR__ . '/base.php';// 执行应用并响应Container::get('app', [defined('APP_PATH') ? APP_PATH : ''])    ->run()    ->send();

  2.1 \thinkphp\base.php

require __DIR__ . '/library/think/Loader.php';// 注册自动加载Loader::register();
// 注册核心类到容器Container::getInstance()->bind([    'app'                   => App::class, //App::class ≈ string(9) "think\App"//...    'view'                  => View::class,//...]);

3 \thinkphp\library\think\App.php

 
public function run() {
// 初始化应用 $this->initialize(); //主要加载配置,助手函数 // 执行调度 $data = $dispatch->run(); //$dispatch = object(think\route\dispatch\Url) //... $response = Response::create(); //\thinkphp\library\think\Response.php //... return $response;

  3.1 thinkphp\library\think\route\dispatch\Url.php

public function run(){    // 解析默认的URL规则    $url    = str_replace($this->param['depr'], '|', $this->dispatch);    $result = $this->parseUrl($url);    return (new Module($result))->run();}

      3.1.1 thinkphp\library\think\route\dispatch\Module.php

public function run(){// 实例化控制器    $instance = $this->app->controller( //thinkphp\library\think\App.php//...  $call = [$instance, $action]; //$instance = object(app\user\controller\Home)//...  return Container::getInstance()->invokeMethod($call, $vars);

    3.2 \thinkphp\library\think\Response.php

public static function create($data = '', $type = '', $code = 200, array $header = [], $options = [])    {     //... if (class_exists($class)) {            return new $class($data, $code, $header, $options);        } else {            return new static($data, $code, $header, $options);        }    }

  4

//发送数据到客户端public function send()    {
//... echo $data;

 

控制器中 $this->fetch()

thinkphp\library\think\Controller.php

public function __construct()    {        $this->request = Container::get('request');        $this->app     = Container::get('app');        $this->view    = Container::get('view')->init(            $this->app['config']->pull('template'),            $this->app['config']->get('view_replace_str')        );
protected function fetch($template = '', $vars = [], $replace = [], $config = [])    {        return $this->view->fetch($template, $vars, $replace, $config);    }

thinkphp\library\think\View.php

public function init($engine = [], $replace = [])    {        // 初始化模板引擎        $this->engine($engine);
public function engine($options = []){
  $type = !empty($options['type']) ? $options['type'] : 'Think';  $class = false !== strpos($type, '\\') ? $type : '\\think\\view\\driver\\' . ucfirst($type);   $this->engine = new $class($options); //$this->engine = thinkphp\library\think\view\driver\Think.php   return $this; }

 

转载于:https://www.cnblogs.com/8000cabbage/p/7508271.html

你可能感兴趣的文章
python介绍
查看>>
Unity-Editor按钮和菜单显示
查看>>
SharePoint InfoPath 保存无法发布问题
查看>>
word2vec:主要概念和流程
查看>>
Java - MyBites 逆向工程
查看>>
104. Maximum Depth of Binary Tree
查看>>
Python--变量作用域
查看>>
2017-2018-1 20155235 《信息安全系统设计基础》第九周学习总结
查看>>
!!和??
查看>>
matlab演奏卡农 Cripple Pachebel's Canon on Matlab
查看>>
apache的MPM机制-prefork
查看>>
js的一些实用的小技巧
查看>>
vue-cli中理不清的assetsSubDirectory 和 assetsPublicPath
查看>>
iOS的UILabel设置居上对齐,居中对齐,居下对齐
查看>>
最流行的android组件大全
查看>>
【Android自定义控件】支持多层嵌套RadioButton的RadioGroup
查看>>
Swift - 内存泄露原因(循环强引用)及解决办法
查看>>
AIDL-Android接口描述语言实现跨进程通讯
查看>>
剑指Offer - 九度1354 - 和为S的连续正数序列
查看>>
LeetCode - Anagrams
查看>>