Yii2.0执行流程详解

Mar 27, 2018 pm 01:43 PM
melaksanakan Penjelasan terperinci

本文主要和大家分享Yii2.0执行流程详解,主要以代码的形式和大家分享,希望能帮助到大家。

index.php
 2     ---->引入 vendor/auto_load.php
 3 auto_load.php
 4     ---->引入 ventor/composer/autoload_real.php
 5     ---->执行 ComposerAutoloaderInit240f916b39e20bc11bc03e2039805bd4->getLoader
 6 autoload_real.php
 7     ---->getLoader
 8     ---->单例
 9     ---->spl_autoload_register(array('ComposerAutoloaderInit240f916b39e20bc11bc03e2039805bd4','loadClassLoader'))
10     ---->self::$loader = new \Composer\Autoload\ClassLoader();
11     ---->引入 \Composer\Autoload\ClassLoader
12     ---->引入 autoload_namespaces.php 给作为属性 $loader
13         ---->$vendorDir  $baseDir
14     ---->引入 autoload_psr4.php 作为属性给 $loader
15     ---->$loader->register(true);
16         ---->spl_autoload_register this,loadClass
17         ---->loadClass ----> findFile 
18     ---->引入 autoload_files.php require
19     ---->return $loader
20 index.php
21     ---->初始化了一个$loader  (暂时不知道什么用)
22     ---->引入 /vendor/yiisoft/yii2/Yii.php
23 Yii.php
24     ----> 引入 BaseYii.php ,Yii 继承 BaseYii
25     ---->spl_autoload_register(BaseYii,autoload)
26     ---->Yii::$classMap = include(__DIR__ . '/classes.php'); //引入一堆php class地址
27     ---->Yii::$container = new yii\di\Container;//容器
28  
29 //继承关系梳理
30     yii\di\Container(容器) -> yii\base\Component(实现 属性,事件,行为 功能的基类) -> Object(实现 属性 功能的基类,含有__construct)
31     yii\web\Application(所有web应用类的基类) -> \yii\base\Application(所有应用的基类,__construct) -> Module(所有模块和应用的基类,含有__construct) -> yii\di\ServiceLocator(服务定位器,包含所有模块和应用) -> yii\base\Component -> Object
32  
33 index.php
34     ---->$config 引入 
35     (new yii\web\Application($config))->run();
36     ---->\yii\base\Application __construct()
37         ---->Yii::$app = $this (Application)
38         ---->$this->setInstance($this); 设置当前请求类的实例 (把Application类的对象push进Yii的loadedModules里)
39         ---->$this->preInit($config);
40             ---->$this->_basePath = $_config['basepath']  Yii::aliases[@app] = $_config['basepath']
41             ---->$this->getVendorPath 设置框架路径
42                 ---->setVendorPath Yii::aliases[@vendor] Yii::aliases[@bower] Yii::aliases[@npm]
43             ---->$this->getRuntimePath 同上,设置runtimePath Yii::aliases[@runtime]
44             ---->setTimeZone 设置时区
45             ---->核心组件信息(地址)注入$config log view formatter i18n mailer urlManager assetManager security
46         ---->registerErrorHandler 定义错误处理程序
47         ---->Component::__construct($config); Object中的__construct  //这步发生了很多事情
48             ---->Yii::configure($this)  把$config赋给$this作属性
49  
50             ? $this->bootstrap 中的值哪来的 ?---->配置文件来的。。。。
51  
52         ---->$this->init()
53         ---->$this->bootstrap(); 初始化扩展和执行引导组件。
54             ---->引入@vendor/yiisoft/extensions.php
55             ---->Yii::aliases['xxx'] = 'xxx'; extensions.php中aliase地址
56         <!-- 初始化完成 -->
57  
58     ---->\yii\base\Application->run()
59         ---->$this->trigger($name)  --- $event = new Event;  //$name = beforeRequest 执行 _event[beforeRequest]handler
60             ---->$event->sender = application object
61                  $event->name = $name;
62                  //这两句没懂
63                  $event->data = $handler[1];
64                  call_user_func($handler[0], $event);
65                  Event::trigger($this, $name, $event); //$this = application object 
66  
67         ---->$response = $this->handleRequest($this->getRequest());
68             ---->$this->getRequest() ---->get(&#39;request&#39;) get方法位于ServiceLocator ,返回指定id的实例(返回request实例到_components[&#39;request&#39;])
69             ---->$this->handleRequest(request对象) //request对象的类是yii/web/request
70                 ---->list ($route, $params) = $request->resolve();//解决当前请求的路由和相关参数  
71                     ---->$params 放置地址栏解析的结果数组Array ( [0] => [1] => Array ( [m] => sds [c] => dasd ) )
72                     ---->runAction($route, $params); //位于Module
73                         ---->list($controller, $actionID) = $this->createController($route) 返回array(&#39;0&#39;=>控制器controller对象,&#39;1&#39;=>&#39;action名&#39;) 
74                         $controller 赋给Yii::$app->controller
75                         ---->$controller->runAction($actionID, $params);  yii/base/Controller
76  
77                         ---->runAction($actionID, $params);  yii/base/Controller
78                             ---->$action = $this->createAction($id); //生成一个InlineAction对象,赋给Yii::$app->requestedAction
79                                 InlineAction __construct $this->actionMethod = $actionMethod;
80                             ---->beforeAction
81                             ---->$action->runWithParams($params); //位于 yii/base/InlineAction
82                                 ---->$args = $this->controller->bindActionParams($this, $params);//位于yii/web/controller $this=>InlineAction $params=>模块/控制器 数组  --- 将参数绑定到action,返回有效参数数组$args
83                                 ---->赋给Yii::$app->requestedParams = $args;
84                                 ---->call_user_func_array([$this->controller, $this->actionMethod], $args) //执行第一个回调函数 真正执行
85                             ---->afterAction
86                             ---->返回执行结果(页面已出) 给Module中的runAction
87  
88         ---->返回结果给handleRequest
89         ---->$response = $this->getResponse(); 返回一个response对象,具体同上
90         ---->$response->data = $result;  
91         ---->返回$response给yii/base/Application 的 run $response
92         ---->$response->send();输出内容
93         <!-- 页面输出完成 -->
94  
95  
96
Salin selepas log masuk

Atas ialah kandungan terperinci Yii2.0执行流程详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Skrip Python akan dilaksanakan setiap 5 minit Skrip Python akan dilaksanakan setiap 5 minit Sep 10, 2023 pm 03:33 PM

Automasi dan penjadualan tugas memainkan peranan penting dalam menyelaraskan tugasan berulang dalam pembangunan perisian. Bayangkan terdapat skrip Python yang perlu dilaksanakan setiap 5 minit, seperti mendapatkan data daripada API, melakukan pemprosesan data atau menghantar kemas kini berkala. Menjalankan skrip secara manual dengan kerap boleh memakan masa dan terdedah kepada ralat. Di sinilah penjadualan tugas masuk. Dalam catatan blog ini, kami akan meneroka cara menjadualkan skrip Python untuk dilaksanakan setiap 5 minit, memastikan ia berjalan secara automatik tanpa campur tangan manual. Kami akan membincangkan kaedah dan perpustakaan berbeza yang boleh digunakan untuk mencapai matlamat ini, membolehkan anda mengautomasikan tugas dengan cekap. Cara mudah untuk menjalankan skrip Python setiap 5 minit menggunakan fungsi time.sleep() ialah menggunakan tim

Penjelasan terperinci tentang mendapatkan hak pentadbir dalam Win11 Penjelasan terperinci tentang mendapatkan hak pentadbir dalam Win11 Mar 08, 2024 pm 03:06 PM

Sistem pengendalian Windows ialah salah satu sistem pengendalian yang paling popular di dunia, dan versi baharunya Win11 telah menarik perhatian ramai. Dalam sistem Win11, mendapatkan hak pentadbir adalah operasi penting Hak pentadbir membolehkan pengguna melakukan lebih banyak operasi dan tetapan pada sistem. Artikel ini akan memperkenalkan secara terperinci cara mendapatkan kebenaran pentadbir dalam sistem Win11 dan cara mengurus kebenaran dengan berkesan. Dalam sistem Win11, hak pentadbir dibahagikan kepada dua jenis: pentadbir tempatan dan pentadbir domain. Pentadbir tempatan mempunyai hak pentadbiran penuh ke atas komputer tempatan

Penjelasan terperinci tentang fungsi mod dalam C++ Penjelasan terperinci tentang fungsi mod dalam C++ Nov 18, 2023 pm 03:08 PM

Penjelasan terperinci tentang fungsi mod dalam C++ Dalam statistik, mod merujuk kepada nilai yang paling kerap muncul dalam set data. Dalam bahasa C++, kita boleh mencari mod dalam mana-mana set data dengan menulis fungsi mod. Fungsi mod boleh dilaksanakan dalam pelbagai cara, dua daripada kaedah yang biasa digunakan akan diperkenalkan secara terperinci di bawah. Kaedah pertama ialah menggunakan jadual cincang untuk mengira bilangan kejadian setiap nombor. Pertama, kita perlu menentukan jadual cincang dengan setiap nombor sebagai kunci dan bilangan kejadian sebagai nilai. Kemudian, untuk set data yang diberikan, kami jalankan

Penjelasan terperinci tentang operasi bahagian dalam Oracle SQL Penjelasan terperinci tentang operasi bahagian dalam Oracle SQL Mar 10, 2024 am 09:51 AM

Penjelasan terperinci tentang operasi bahagi dalam OracleSQL Dalam OracleSQL, operasi bahagi ialah operasi matematik yang biasa dan penting, digunakan untuk mengira hasil pembahagian dua nombor. Bahagian sering digunakan dalam pertanyaan pangkalan data, jadi memahami operasi bahagian dan penggunaannya dalam OracleSQL adalah salah satu kemahiran penting untuk pembangun pangkalan data. Artikel ini akan membincangkan pengetahuan berkaitan operasi bahagian dalam OracleSQL secara terperinci dan menyediakan contoh kod khusus untuk rujukan pembaca. 1. Operasi bahagian dalam OracleSQL

Cara menggunakan Python untuk skrip dan pelaksanaan di Linux Cara menggunakan Python untuk skrip dan pelaksanaan di Linux Oct 05, 2023 am 11:45 AM

Cara menggunakan Python untuk menulis dan melaksanakan skrip dalam Linux Dalam sistem pengendalian Linux, kita boleh menggunakan Python untuk menulis dan melaksanakan pelbagai skrip. Python ialah bahasa pengaturcaraan ringkas dan berkuasa yang menyediakan banyak perpustakaan dan alatan untuk menjadikan skrip lebih mudah dan lebih cekap. Di bawah ini kami akan memperkenalkan langkah asas cara menggunakan Python untuk penulisan dan pelaksanaan skrip dalam Linux, dan menyediakan beberapa contoh kod khusus untuk membantu anda memahami dan menggunakannya dengan lebih baik. Pasang Python

Penjelasan terperinci tentang fungsi baki dalam C++ Penjelasan terperinci tentang fungsi baki dalam C++ Nov 18, 2023 pm 02:41 PM

Penjelasan terperinci tentang fungsi baki dalam C++ Dalam C++, operator baki (%) digunakan untuk mengira baki pembahagian dua nombor. Ia ialah pengendali binari yang operannya boleh terdiri daripada sebarang jenis integer (termasuk char, short, int, long, dll.) atau jenis nombor titik terapung (seperti float, double). Operator selebihnya mengembalikan hasil dengan tanda yang sama seperti dividen. Sebagai contoh, untuk baki operasi integer, kita boleh menggunakan kod berikut untuk melaksanakan: inta=10;intb=3;

Penjelasan terperinci tentang peranan dan penggunaan pengendali modulo PHP Penjelasan terperinci tentang peranan dan penggunaan pengendali modulo PHP Mar 19, 2024 pm 04:33 PM

Operator modulo (%) dalam PHP digunakan untuk mendapatkan baki pembahagian dua nombor. Dalam artikel ini, kami akan membincangkan peranan dan penggunaan pengendali modulo secara terperinci, dan memberikan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik. 1. Peranan pengendali modulo Dalam matematik, apabila kita membahagi integer dengan integer lain, kita mendapat hasil bagi dan baki. Sebagai contoh, apabila kita membahagi 10 dengan 3, hasil bahagi ialah 3 dan selebihnya ialah 1. Operator modulo digunakan untuk mendapatkan baki ini. 2. Penggunaan operator modulo Dalam PHP, gunakan simbol % untuk mewakili modulus

Penjelasan terperinci tentang fungsi sistem panggilan sistem linux(). Penjelasan terperinci tentang fungsi sistem panggilan sistem linux(). Feb 22, 2024 pm 08:21 PM

Penjelasan terperinci tentang fungsi sistem panggilan sistem Linux() Panggilan sistem ialah bahagian yang sangat penting dalam sistem pengendalian Linux Ia menyediakan cara untuk berinteraksi dengan kernel sistem. Antaranya, fungsi system() adalah salah satu fungsi panggilan sistem yang biasa digunakan. Artikel ini akan memperkenalkan penggunaan fungsi system() secara terperinci dan memberikan contoh kod yang sepadan. Konsep Asas Panggilan Sistem Panggilan sistem ialah satu cara untuk atur cara pengguna berinteraksi dengan kernel sistem pengendalian. Program pengguna meminta sistem pengendalian dengan memanggil fungsi panggilan sistem

See all articles