国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
yii2源碼學(xué)習(xí)筆記(九),yii2源碼學(xué)習(xí)筆記
首頁 後端開發(fā) php教程 yii2源碼學(xué)習(xí)筆記(九),yii2源碼學(xué)習(xí)筆記_PHP教程

yii2源碼學(xué)習(xí)筆記(九),yii2源碼學(xué)習(xí)筆記_PHP教程

Jul 12, 2016 am 08:51 AM
yii

yii2源碼學(xué)習(xí)筆記(九),yii2源碼學(xué)習(xí)筆記

Application是所有應(yīng)用程序類的基類,接下來了解一下它的源碼。yii2\base\Application.php。

<span>  1</span> <?<span>php
</span><span>  2</span> <span>/*</span><span>*
</span><span>  3</span> <span> * @link </span><span>http://www.yiiframework.com/</span>
<span>  4</span> <span> * @copyright Copyright (c) 2008 Yii Software LLC
</span><span>  5</span> <span> * @license </span><span>http://www.yiiframework.com/license/</span>
<span>  6</span>  <span>*/</span>
<span>  7</span> 
<span>  8</span> <span>namespace</span> yii\<span>base</span><span>;
</span><span>  9</span> 
<span> 10</span> <span>use Yii;
</span><span> 11</span> 
<span> 12</span> <span>/*</span><span>*
</span><span> 13</span> <span> * Application is the base class for all application classes.
</span><span> 14</span> <span> * 是所有應(yīng)用程序類的基類
</span><span> 15</span> <span> * @property \yii\web\AssetManager $assetManager The asset manager application component. This property is
</span><span> 16</span> <span> * read-only.資產(chǎn)管理器應(yīng)用組件,只讀
</span><span> 17</span> <span> * @property \yii\rbac\ManagerInterface $authManager The auth manager application component. Null is returned
</span><span> 18</span> <span> * if auth manager is not configured. This property is read-only.認(rèn)證管理器應(yīng)用程序組件。未配置返回null,只讀
</span><span> 19</span> <span> * @property string $basePath The root directory of the application. 應(yīng)用程序的根目錄。
</span><span> 20</span> <span> * @property \yii\caching\Cache $cache The cache application component. Null if the component is not enabled.
</span><span> 21</span> <span> * This property is read-only.緩存應(yīng)用程序組件。
</span><span> 22</span> <span> * @property \yii\db\Connection $db The database connection. This property is read-only.數(shù)據(jù)庫連接。
</span><span> 23</span> <span> * @property \yii\web\ErrorHandler|\yii\console\ErrorHandler $errorHandler The error handler application
</span><span> 24</span> <span> * component. This property is read-only.錯(cuò)誤處理程序應(yīng)用程序組件
</span><span> 25</span> <span> * @property \yii\i18n\Formatter $formatter The formatter application component. This property is read-only.
</span><span> 26</span> <span> * 格式化程序的應(yīng)用程序組件。
</span><span> 27</span> <span> * @property \yii\i18n\I18N $i18n The internationalization application component. This property is read-only.
</span><span> 28</span> <span> * 國際化應(yīng)用組件。
</span><span> 29</span> <span> * @property \yii\log\Dispatcher $log The log dispatcher application component. This property is read-only.
</span><span> 30</span> <span> * 日志調(diào)度程序組件。
</span><span> 31</span> <span> * @property \yii\mail\MailerInterface $mailer The mailer application component. This property is read-only.
</span><span> 32</span> <span> * 郵件應(yīng)用程序組件。
</span><span> 33</span> <span> * @property \yii\web\Request|\yii\console\Request $request The request component. This property is read-only.
</span><span> 34</span> <span> * 請(qǐng)求組件。
</span><span> 35</span> <span> * @property \yii\web\Response|\yii\console\Response $response The response component. This property is
</span><span> 36</span> <span> * read-only.反應(yīng)元件。
</span><span> 37</span> <span> * @property string $runtimePath The directory that stores runtime files. Defaults to the "runtime"
</span><span> 38</span> <span> * subdirectory under [[basePath]].存儲(chǔ)運(yùn)行時(shí)文件的目錄。
</span><span> 39</span> <span> * @property \yii\base\Security $security The security application component. This property is read-only.
</span><span> 40</span> <span> * 安全應(yīng)用組件。
</span><span> 41</span> <span> * @property string $timeZone The time zone used by this application.該應(yīng)用程序使用的時(shí)區(qū)。
</span><span> 42</span> <span> * @property string $uniqueId The unique ID of the module. This property is read-only.模塊的唯一標(biāo)識(shí)。
</span><span> 43</span> <span> * @property \yii\web\UrlManager $urlManager The URL manager for this application. This property is read-only.
</span><span> 44</span> <span> * 此應(yīng)用程序的網(wǎng)址管理器。
</span><span> 45</span> <span> * @property string $vendorPath The directory that stores vendor files. Defaults to "vendor" directory under
</span><span> 46</span> <span> * [[basePath]].存儲(chǔ)供應(yīng)商文件的目錄。
</span><span> 47</span> <span> * @property View|\yii\web\View $view The view application component that is used to render various view
</span><span> 48</span> <span> * files. This property is read-only.用于呈現(xiàn)各種視圖文件的視圖應(yīng)用程序組件
</span><span> 49</span> <span> *
</span><span> 50</span> <span> * @author Qiang Xue <qiang.xue@gmail.com>
</span><span> 51</span> <span> * @since 2.0
</span><span> 52</span>  <span>*/</span>
<span> 53</span> <span>abstract</span> <span>class</span><span> Application extends Module
</span><span> 54</span> <span>{
</span><span> 55</span>     <span>/*</span><span>*
</span><span> 56</span> <span>     * @event Event an event raised before the application starts to handle a request.
</span><span> 57</span> <span>     * 在應(yīng)用程序開始處理請(qǐng)求之前提出的事件。
</span><span> 58</span>      <span>*/</span>
<span> 59</span>     <span>const</span> EVENT_BEFORE_REQUEST = <span>'</span><span>beforeRequest</span><span>'</span><span>;
</span><span> 60</span>     <span>/*</span><span>*
</span><span> 61</span> <span>     * @event Event an event raised after the application successfully handles a request (before the response is sent out).
</span><span> 62</span> <span>     * 該應(yīng)用程序成功處理請(qǐng)求后提出的事件
</span><span> 63</span>      <span>*/</span>
<span> 64</span>     <span>const</span> EVENT_AFTER_REQUEST = <span>'</span><span>afterRequest</span><span>'</span><span>;
</span><span> 65</span>     <span>/*</span><span>*
</span><span> 66</span> <span>     * Application state used by [[state]]: application just started.
</span><span> 67</span> <span>     * [[state]]適用狀態(tài):剛開始應(yīng)用
</span><span> 68</span>      <span>*/</span>
<span> 69</span>     <span>const</span> STATE_BEGIN = <span>0</span><span>;
</span><span> 70</span>     <span>/*</span><span>*
</span><span> 71</span> <span>     * Application state used by [[state]]: application is initializing.
</span><span> 72</span> <span>     *  [[state]]應(yīng)用程序狀態(tài):應(yīng)用程序初始化。
</span><span> 73</span>      <span>*/</span>
<span> 74</span>     <span>const</span> STATE_INIT = <span>1</span><span>;
</span><span> 75</span>     <span>/*</span><span>*
</span><span> 76</span> <span>     * Application state used by [[state]]: application is triggering [[EVENT_BEFORE_REQUEST]].
</span><span> 77</span> <span>     *  [[state]]應(yīng)用程序狀態(tài):應(yīng)用觸發(fā)[[EVENT_BEFORE_REQUEST]]
</span><span> 78</span>      <span>*/</span>
<span> 79</span>     <span>const</span> STATE_BEFORE_REQUEST = <span>2</span><span>;
</span><span> 80</span>     <span>/*</span><span>*
</span><span> 81</span> <span>     * Application state used by [[state]]: application is handling the request.
</span><span> 82</span> <span>     *  [[state]]應(yīng)用程序狀態(tài):應(yīng)用程序處理請(qǐng)求。
</span><span> 83</span>      <span>*/</span>
<span> 84</span>     <span>const</span> STATE_HANDLING_REQUEST = <span>3</span><span>;
</span><span> 85</span>     <span>/*</span><span>*
</span><span> 86</span> <span>     * Application state used by [[state]]: application is triggering [[EVENT_AFTER_REQUEST]]..
</span><span> 87</span> <span>     *  [[state]]應(yīng)用程序狀態(tài):應(yīng)用觸發(fā)[[EVENT_AFTER_REQUEST]]
</span><span> 88</span>      <span>*/</span>
<span> 89</span>     <span>const</span> STATE_AFTER_REQUEST = <span>4</span><span>;
</span><span> 90</span>     <span>/*</span><span>*
</span><span> 91</span> <span>     * Application state used by [[state]]: application is about to send response.
</span><span> 92</span> <span>     *  [[state]]應(yīng)用程序狀態(tài):應(yīng)用程序即將發(fā)送響應(yīng)。
</span><span> 93</span>      <span>*/</span>
<span> 94</span>     <span>const</span> STATE_SENDING_RESPONSE = <span>5</span><span>;
</span><span> 95</span>     <span>/*</span><span>*
</span><span> 96</span> <span>     * Application state used by [[state]]: application has ended.
</span><span> 97</span> <span>     *  [[state]]應(yīng)用程序狀態(tài):應(yīng)用程序結(jié)束。
</span><span> 98</span>      <span>*/</span>
<span> 99</span>     <span>const</span> STATE_END = <span>6</span><span>;
</span><span>100</span> 
<span>101</span>     <span>/*</span><span>*
</span><span>102</span> <span>     * @var string the namespace that controller classes are located in.控制器類的命名空間位置。
</span><span>103</span> <span>     * This namespace will be used to load controller classes by prepending it to the controller class name.
</span><span>104</span> <span>     * The default namespace is `app\controllers`.
</span><span>105</span> <span>     * 此命名空間將用于負(fù)載控制器類重寫它的控制器類的名字。 默認(rèn)命名空間是`app\controllers`。
</span><span>106</span> <span>     * Please refer to the [guide about class autoloading](guide:concept-autoloading.md) for more details.
</span><span>107</span>      <span>*/</span>
<span>108</span>     <span>public</span> $controllerNamespace = <span>'</span><span>app\\controllers</span><span>'</span><span>;
</span><span>109</span>     <span>/*</span><span>*
</span><span>110</span> <span>     * @var string the application name.應(yīng)用程序名稱。
</span><span>111</span>      <span>*/</span>
<span>112</span>     <span>public</span> $name = <span>'</span><span>My Application</span><span>'</span><span>;
</span><span>113</span>     <span>/*</span><span>*
</span><span>114</span> <span>     * @var string the version of this application.此應(yīng)用程序的版本。
</span><span>115</span>      <span>*/</span>
<span>116</span>     <span>public</span> $version = <span>'</span><span>1.0</span><span>'</span><span>;
</span><span>117</span>     <span>/*</span><span>*
</span><span>118</span> <span>     * @var string the charset currently used for the application.目前使用的字符集。
</span><span>119</span>      <span>*/</span>
<span>120</span>     <span>public</span> $charset = <span>'</span><span>UTF-8</span><span>'</span><span>;
</span><span>121</span>     <span>/*</span><span>*
</span><span>122</span> <span>     * @var string the language that is meant to be used for end users. It is recommended that you
</span><span>123</span> <span>     * use [IETF language tags](</span><span>http://en.wikipedia.org/wiki/IETF_language_tag</span><span>). For example, `en` stands
</span><span>124</span> <span>     * for English, while `en-US` stands for English (United States).
</span><span>125</span> <span>     * 用來作為終端用戶使用的語言
</span><span>126</span> <span>     * @see sourceLanguage
</span><span>127</span>      <span>*/</span>
<span>128</span>     <span>public</span> $language = <span>'</span><span>en-US</span><span>'</span><span>;
</span><span>129</span>     <span>/*</span><span>*
</span><span>130</span> <span>     * @var string the language that the application is written in. This mainly refers to
</span><span>131</span> <span>     * the language that the messages and view files are written in.
</span><span>132</span> <span>     * 應(yīng)用程序編寫的語言。
</span><span>133</span> <span>     * @see language
</span><span>134</span>      <span>*/</span>
<span>135</span>     <span>public</span> $sourceLanguage = <span>'</span><span>en-US</span><span>'</span><span>;
</span><span>136</span>     <span>/*</span><span>*
</span><span>137</span> <span>     * @var Controller the currently active controller instance當(dāng)前活動(dòng)控制器實(shí)例
</span><span>138</span>      <span>*/</span>
<span>139</span>     <span>public</span><span> $controller;
</span><span>140</span>     <span>/*</span><span>*
</span><span>141</span> <span>     * @var string|boolean the layout that should be applied for views in this application. Defaults to 'main'.
</span><span>142</span> <span>     * If this is false, layout will be disabled.
</span><span>143</span> <span>     * 該應(yīng)用程序中應(yīng)用的布局。
</span><span>144</span>      <span>*/</span>
<span>145</span>     <span>public</span> $layout = <span>'</span><span>main</span><span>'</span><span>;
</span><span>146</span>     <span>/*</span><span>*
</span><span>147</span> <span>     * @var string the requested route請(qǐng)求的路徑    請(qǐng)求的路徑
</span><span>148</span>      <span>*/</span>
<span>149</span>     <span>public</span><span> $requestedRoute;
</span><span>150</span>     <span>/*</span><span>*
</span><span>151</span> <span>     * @var Action the requested Action. If null, it means the request cannot be resolved into an action.
</span><span>152</span> <span>     * 操作所要求的行動(dòng)
</span><span>153</span>      <span>*/</span>
<span>154</span>     <span>public</span><span> $requestedAction;
</span><span>155</span>     <span>/*</span><span>*
</span><span>156</span> <span>     * @var array the parameters supplied to the requested action.
</span><span>157</span> <span>     * 所請(qǐng)求的動(dòng)作提供的參數(shù)。
</span><span>158</span>      <span>*/</span>
<span>159</span>     <span>public</span><span> $requestedParams;
</span><span>160</span>     <span>/*</span><span>*
</span><span>161</span> <span>     * @var array list of installed Yii extensions. Each array element represents a single extension
</span><span>162</span> <span>     * with the following structure:
</span><span>163</span> <span>     * 安裝Yii擴(kuò)展名列表。每個(gè)數(shù)組元素代表一個(gè)擴(kuò)展
</span><span>164</span> <span>     *
</span><span>165</span> <span>     * ~~~
</span><span>166</span> <span>     * [
</span><span>167</span> <span>     *     'name' => 'extension name',
</span><span>168</span> <span>     *     'version' => 'version number',
</span><span>169</span> <span>     *     'bootstrap' => 'BootstrapClassName',  // optional, may also be a configuration array
</span><span>170</span> <span>     *     'alias' => [
</span><span>171</span> <span>     *         '@alias1' => 'to/path1',
</span><span>172</span> <span>     *         '@alias2' => 'to/path2',
</span><span>173</span> <span>     *     ],
</span><span>174</span> <span>     * ]
</span><span>175</span> <span>     * ~~~
</span><span>176</span> <span>     *
</span><span>177</span> <span>     * The "bootstrap" class listed above will be instantiated during the application
</span><span>178</span> <span>     * [[bootstrap()|bootstrapping process]]. If the class implements [[BootstrapInterface]],
</span><span>179</span> <span>     * its [[BootstrapInterface::bootstrap()|bootstrap()]] method will be also be called.
</span><span>180</span> <span>     *
</span><span>181</span> <span>     * If not set explicitly in the application config, this property will be populated with the contents of
</span><span>182</span> <span>     * 如果在應(yīng)用程序配置中沒有設(shè)置,該屬性將填充到內(nèi)容
</span><span>183</span> <span>     * @vendor/yiisoft/extensions.php`.
</span><span>184</span>      <span>*/</span>
<span>185</span>     <span>public</span><span> $extensions;
</span><span>186</span>     <span>/*</span><span>*
</span><span>187</span> <span>     * @var array list of components that should be run during the application [[bootstrap()|bootstrapping process]].
</span><span>188</span> <span>     * 組件的列表,運(yùn)行在 [[bootstrap()|bootstrapping process]]中的應(yīng)用
</span><span>189</span> <span>     * Each component may be specified in one of the following formats:
</span><span>190</span> <span>     *
</span><span>191</span> <span>     * - an application component ID as specified via [[components]].
</span><span>192</span> <span>     * - a module ID as specified via [[modules]].
</span><span>193</span> <span>     * - a class name.
</span><span>194</span> <span>     * - a configuration array.
</span><span>195</span> <span>     *
</span><span>196</span> <span>     * During the bootstrapping process, each component will be instantiated. If the component class
</span><span>197</span> <span>     * implements [[BootstrapInterface]], its [[BootstrapInterface::bootstrap()|bootstrap()]] method
</span><span>198</span> <span>     * will be also be called.
</span><span>199</span> <span>     * 在整個(gè)啟動(dòng)過程中,每個(gè)組件被實(shí)例化。如果組件類提到 [[BootstrapInterface]], 
</span><span>200</span> <span>     * [[BootstrapInterface::bootstrap()|bootstrap()]]方法也會(huì)調(diào)用
</span><span>201</span>      <span>*/</span>
<span>202</span>     <span>public</span> $bootstrap =<span> [];
</span><span>203</span>     <span>/*</span><span>*
</span><span>204</span> <span>     * @var integer the current application state during a request handling life cycle.
</span><span>205</span> <span>     * This property is managed by the application. Do not modify this property.    
</span><span>206</span> <span>     * 在請(qǐng)求處理生命周期中的當(dāng)前應(yīng)用程序狀態(tài)。屬性由應(yīng)用程序管理。不要修改此屬性。
</span><span>207</span>      <span>*/</span>
<span>208</span>     <span>public</span><span> $state;
</span><span>209</span>     <span>/*</span><span>*
</span><span>210</span> <span>     * @var array list of loaded modules indexed by their class names.
</span><span>211</span> <span>     * 加載模塊列表由它們的類名稱索引組成。
</span><span>212</span>      <span>*/</span>
<span>213</span>     <span>public</span> $loadedModules =<span> [];
</span><span>214</span> 
<span>215</span> 
<span>216</span>     <span>/*</span><span>*
</span><span>217</span> <span>     * Constructor.構(gòu)造函數(shù)
</span><span>218</span> <span>     * @param array $config name-value pairs that will be used to initialize the object properties.
</span><span>219</span> <span>     * Note that the configuration must contain both [[id]] and [[basePath]].
</span><span>220</span> <span>     * 用來初始化對(duì)象屬性的 name-value 注意配置必須包含[[id]] 和[[basePath]].
</span><span>221</span> <span>     * @throws InvalidConfigException if either [[id]] or [[basePath]] configuration is missing.
</span><span>222</span> <span>     * 如果是修改[[id]] 或[[basePath]] 則配置丟失。
</span><span>223</span>      <span>*/</span>
<span>224</span>     <span>public</span> function __construct($config =<span> [])
</span><span>225</span> <span>    {
</span><span>226</span>         Yii::$app = $<span>this</span>;<span>//</span><span> 將自身的實(shí)例綁到Y(jié)ii的$app上</span>
<span>227</span>         $<span>this</span>->setInstance($<span>this</span>);<span>//</span><span> 將自身加入到loadedModules中</span>
<span>228</span> 
<span>229</span>         $<span>this</span>->state = self::STATE_BEGIN;<span>//</span><span> 設(shè)置狀態(tài)為剛開始
</span><span>230</span> 
<span>231</span>         <span>//</span><span> 做預(yù)處理配置</span>
<span>232</span>         $<span>this</span>-><span>preInit($config);
</span><span>233</span> 
<span>234</span>         $<span>this</span>-><span>registerErrorHandler($config);
</span><span>235</span> 
<span>236</span> <span>        Component::__construct($config);
</span><span>237</span> <span>    }
</span><span>238</span> 
<span>239</span>     <span>/*</span><span>*
</span><span>240</span> <span>     * Pre-initializes the application. 初始化應(yīng)用。
</span><span>241</span> <span>     * This method is called at the beginning of the application constructor.
</span><span>242</span> <span>     * It initializes several important application properties.
</span><span>243</span> <span>     * 在構(gòu)造函數(shù)中調(diào)用該方法,用于初始化一些重要的屬性
</span><span>244</span> <span>     * If you override this method, please make sure you call the parent implementation.
</span><span>245</span> <span>     * @param array $config the application configuration   應(yīng)用的配置
</span><span>246</span> <span>     * @throws InvalidConfigException if either [[id]] or [[basePath]] configuration is missing.
</span><span>247</span>      <span>*/</span>
<span>248</span>     <span>public</span> function preInit(&<span>$config)
</span><span>249</span> <span>    {
</span><span>250</span>          <span>//</span><span> 使用了&符號(hào),表示$config的修改會(huì)保留</span>
<span>251</span>         <span>if</span> (!isset($config[<span>'</span><span>id</span><span>'</span>])) {<span>//</span><span>判斷配置中是否有application ID ,如果沒有,拋出異常</span>
<span>252</span>             <span>throw</span> <span>new</span> InvalidConfigException(<span>'</span><span>The "id" configuration for the Application is required.</span><span>'</span><span>);
</span><span>253</span> <span>        }
</span><span>254</span>         <span>if</span> (isset($config[<span>'</span><span>basePath</span><span>'</span><span>])) {
</span><span>255</span>             <span>//</span><span> 是否配置項(xiàng)目的root路徑</span>
<span>256</span>             $<span>this</span>->setBasePath($config[<span>'</span><span>basePath</span><span>'</span><span>]);
</span><span>257</span>              <span>//</span><span>賦值給模塊的_basepath屬性,并在設(shè)置后刪除</span>
<span>258</span>             unset($config[<span>'</span><span>basePath</span><span>'</span><span>]);
</span><span>259</span>         } <span>else</span> {<span>//</span><span>否則拋出異常</span>
<span>260</span>             <span>throw</span> <span>new</span> InvalidConfigException(<span>'</span><span>The "basePath" configuration for the Application is required.</span><span>'</span><span>);
</span><span>261</span> <span>        }
</span><span>262</span>         <span>//</span><span>如果配置文件中設(shè)置了 vendorPath 使用配置的值,并在設(shè)置后刪除,否則使用默認(rèn)的</span>
<span>263</span>         <span>if</span> (isset($config[<span>'</span><span>vendorPath</span><span>'</span><span>])) {
</span><span>264</span>             $<span>this</span>->setVendorPath($config[<span>'</span><span>vendorPath</span><span>'</span><span>]);
</span><span>265</span>             unset($config[<span>'</span><span>vendorPath</span><span>'</span><span>]);
</span><span>266</span>         } <span>else</span><span> {
</span><span>267</span>             <span>//</span><span> set "@vendor"</span>
<span>268</span>             $<span>this</span>-><span>getVendorPath();
</span><span>269</span> <span>        }
</span><span>270</span>         <span>//</span><span>如果配置文件中設(shè)置了 runtimePath 使用配置的值,并在設(shè)置后刪除,否則使用默認(rèn)的</span>
<span>271</span>         <span>if</span> (isset($config[<span>'</span><span>runtimePath</span><span>'</span><span>])) {
</span><span>272</span>             $<span>this</span>->setRuntimePath($config[<span>'</span><span>runtimePath</span><span>'</span><span>]);
</span><span>273</span>             unset($config[<span>'</span><span>runtimePath</span><span>'</span><span>]);
</span><span>274</span>         } <span>else</span><span> {
</span><span>275</span>             <span>//</span><span> set "@runtime"</span>
<span>276</span>             $<span>this</span>-><span>getRuntimePath();
</span><span>277</span> <span>        }
</span><span>278</span>          <span>//</span><span>如果配置文件中設(shè)置了 timeZone 使用配置的值,并在設(shè)置后刪除,否則使用默認(rèn)的時(shí)區(qū)</span>
<span>279</span>         <span>if</span> (isset($config[<span>'</span><span>timeZone</span><span>'</span><span>])) {
</span><span>280</span>             $<span>this</span>->setTimeZone($config[<span>'</span><span>timeZone</span><span>'</span><span>]);
</span><span>281</span>             unset($config[<span>'</span><span>timeZone</span><span>'</span><span>]);
</span><span>282</span>         } elseif (!ini_get(<span>'</span><span>date.timezone</span><span>'</span><span>)) {
</span><span>283</span>             $<span>this</span>->setTimeZone(<span>'</span><span>UTC</span><span>'</span><span>);
</span><span>284</span> <span>        }
</span><span>285</span> 
<span>286</span>         <span>//</span><span> merge core components with custom components</span>
<span>287</span>         <span>foreach</span> ($<span>this</span>->coreComponents() <span>as</span> $id =><span> $component) {
</span><span>288</span>             <span>if</span> (!isset($config[<span>'</span><span>components</span><span>'</span><span>][$id])) {
</span><span>289</span>                 <span>//</span><span> 如果配置中沒有配置相應(yīng)的核心component,就賦給它</span>
<span>290</span>                 $config[<span>'</span><span>components</span><span>'</span>][$id] =<span> $component;
</span><span>291</span>             } elseif (is_array($config[<span>'</span><span>components</span><span>'</span>][$id]) && !isset($config[<span>'</span><span>components</span><span>'</span>][$id][<span>'</span><span>class</span><span>'</span><span>])) {
</span><span>292</span>                  <span>//</span><span> 如果存在相應(yīng)的核心component,但沒有定義它的class,就直接賦到class的key上</span>
<span>293</span>                 $config[<span>'</span><span>components</span><span>'</span>][$id][<span>'</span><span>class</span><span>'</span>] = $component[<span>'</span><span>class</span><span>'</span><span>];
</span><span>294</span> <span>            }
</span><span>295</span> <span>        }
</span><span>296</span> <span>    }
</span><span>297</span> 
<span>298</span>     <span>/*</span><span>*
</span><span>299</span> <span>     * @inheritdoc
</span><span>300</span>      <span>*/</span>
<span>301</span>     <span>public</span><span> function init()
</span><span>302</span> <span>    {
</span><span>303</span>         $<span>this</span>->state =<span> self::STATE_INIT;
</span><span>304</span>         $<span>this</span>-><span>bootstrap();
</span><span>305</span> <span>    }
</span><span>306</span> 
<span>307</span>     <span>/*</span><span>*
</span><span>308</span> <span>     * Initializes extensions and executes bootstrap components.初始化擴(kuò)展并執(zhí)行初始化程序組件
</span><span>309</span> <span>     * This method is called by [[init()]] after the application has been fully configured.
</span><span>310</span> <span>     * 該方法在應(yīng)用完全配置后被[[init()]]調(diào)用
</span><span>311</span> <span>     * If you override this method, make sure you also call the parent implementation.
</span><span>312</span>      <span>*/</span>
<span>313</span>     <span>protected</span><span> function bootstrap()
</span><span>314</span> <span>    {
</span><span>315</span>         <span>if</span> ($<span>this</span>->extensions === <span>null</span>) {<span>//</span><span>如果沒有配置,則調(diào)用Yii的默認(rèn)擴(kuò)展組件</span>
<span>316</span>             $file = Yii::getAlias(<span>'</span><span>@vendor/yiisoft/extensions.php</span><span>'</span><span>);
</span><span>317</span>             $<span>this</span>->extensions = is_file($file) ?<span> include($file) : [];
</span><span>318</span> <span>        }
</span><span>319</span>         <span>foreach</span> ($<span>this</span>->extensions <span>as</span><span> $extension) {
</span><span>320</span>             <span>if</span> (!empty($extension[<span>'</span><span>alias</span><span>'</span>])) {<span>//</span><span>如果擴(kuò)展組件有設(shè)置別名</span>
<span>321</span>                 <span>foreach</span> ($extension[<span>'</span><span>alias</span><span>'</span>] <span>as</span> $name =><span> $path) {
</span><span>322</span>                     Yii::setAlias($name, $path);<span>//</span><span>將給擴(kuò)展的別名注冊(cè)到別名數(shù)組中</span>
<span>323</span> <span>                }
</span><span>324</span> <span>            }
</span><span>325</span>             <span>if</span> (isset($extension[<span>'</span><span>bootstrap</span><span>'</span>])) {<span>//</span><span>如果擴(kuò)展組件有[[bootstrap]]配置 則初始化給擴(kuò)展組件</span>
<span>326</span>                 $component = Yii::createObject($extension[<span>'</span><span>bootstrap</span><span>'</span><span>]);
</span><span>327</span>                 <span>if</span><span> ($component instanceof BootstrapInterface) {
</span><span>328</span>                     Yii::trace(<span>"</span><span>Bootstrap with </span><span>"</span> . get_class($component) . <span>'</span><span>::bootstrap()</span><span>'</span><span>, __METHOD__);
</span><span>329</span>                     $component->bootstrap($<span>this</span><span>);
</span><span>330</span>                 } <span>else</span><span> {
</span><span>331</span>                     Yii::trace(<span>"</span><span>Bootstrap with </span><span>"</span><span> . get_class($component), __METHOD__);
</span><span>332</span> <span>                }
</span><span>333</span> <span>            }
</span><span>334</span> <span>        }
</span><span>335</span> 
<span>336</span>         <span>foreach</span> ($<span>this</span>->bootstrap <span>as</span> $<span>class</span><span>) {
</span><span>337</span>             $component = <span>null</span><span>;
</span><span>338</span>             <span>if</span> (is_string($<span>class</span><span>)) {
</span><span>339</span>                 <span>if</span> ($<span>this</span>->has($<span>class</span><span>)) {
</span><span>340</span>                     $component = $<span>this</span>-><span>get</span>($<span>class</span><span>);
</span><span>341</span>                 } elseif ($<span>this</span>->hasModule($<span>class</span><span>)) {
</span><span>342</span>                     $component = $<span>this</span>->getModule($<span>class</span><span>);
</span><span>343</span>                 } elseif (strpos($<span>class</span>, <span>'</span><span>\\</span><span>'</span>) === <span>false</span><span>) {
</span><span>344</span>                     <span>throw</span> <span>new</span> InvalidConfigException(<span>"</span><span>Unknown bootstrapping component ID: $class</span><span>"</span><span>);
</span><span>345</span> <span>                }
</span><span>346</span> <span>            }
</span><span>347</span>             <span>if</span> (!isset($component)) {<span>//</span><span>如果不存在,則調(diào)用Yii創(chuàng)建對(duì)象</span>
<span>348</span>                 $component = Yii::createObject($<span>class</span><span>);
</span><span>349</span> <span>            }
</span><span>350</span> 
<span>351</span>             <span>if</span><span> ($component instanceof BootstrapInterface) {
</span><span>352</span>                 Yii::trace(<span>"</span><span>Bootstrap with </span><span>"</span> . get_class($component) . <span>'</span><span>::bootstrap()</span><span>'</span><span>, __METHOD__);
</span><span>353</span>                 $component->bootstrap($<span>this</span><span>);
</span><span>354</span>             } <span>else</span><span> {
</span><span>355</span>                 Yii::trace(<span>"</span><span>Bootstrap with </span><span>"</span><span> . get_class($component), __METHOD__);
</span><span>356</span> <span>            }
</span><span>357</span> <span>        }
</span><span>358</span>     }

未完待續(xù)。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1130670.htmlTechArticleyii2源碼學(xué)習(xí)筆記(九),yii2源碼學(xué)習(xí)筆記 Application是所有應(yīng)用程序類的基類,接下來了解一下它的源碼。yii2\base\Application.php。 1 ? php 2 /*...
本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

Yii2 vs Phalcon:哪個(gè)框架更適合開發(fā)顯示卡渲染應(yīng)用? Yii2 vs Phalcon:哪個(gè)框架更適合開發(fā)顯示卡渲染應(yīng)用? Jun 19, 2023 am 08:09 AM

在當(dāng)前資訊時(shí)代,大數(shù)據(jù)、人工智慧、雲(yún)端運(yùn)算等技術(shù)已成為了各大企業(yè)關(guān)注的熱點(diǎn)。在這些技術(shù)中,顯示卡渲染技術(shù)作為一種高效能圖形處理技術(shù),受到了越來越多的關(guān)注。顯示卡渲染技術(shù)廣泛應(yīng)用於遊戲開發(fā)、影視特效、工程建模等領(lǐng)域。而對(duì)於開發(fā)者來說,選擇一個(gè)適合自己專案的框架,是一個(gè)非常重要的決策。在目前的語言中,PHP是一種相當(dāng)有活力的語言,一些優(yōu)秀的PHP框架如Yii2、Ph

Yii框架中的資料查詢:有效率地存取數(shù)據(jù) Yii框架中的資料查詢:有效率地存取數(shù)據(jù) Jun 21, 2023 am 11:22 AM

Yii框架是一個(gè)開源的PHPWeb應(yīng)用程式框架,提供了眾多的工具和元件,簡(jiǎn)化了Web應(yīng)用程式開發(fā)的流程,其中資料查詢是其中一個(gè)重要的元件之一。在Yii框架中,我們可以使用類似SQL的語法來存取資料庫,從而有效率地查詢和操作資料。 Yii框架的查詢建構(gòu)器主要包括以下幾種類型:ActiveRecord查詢、QueryBuilder查詢、命令查詢和原始SQL查詢

php如何使用Yii3框架? php如何使用Yii3框架? May 31, 2023 pm 10:42 PM

隨著互聯(lián)網(wǎng)的不斷發(fā)展,Web應(yīng)用程式開發(fā)的需求也越來越高。對(duì)於開發(fā)人員而言,開發(fā)應(yīng)用程式需要一個(gè)穩(wěn)定、高效、強(qiáng)大的框架,這樣可以提高開發(fā)效率。 Yii是一款領(lǐng)先的高效能PHP框架,它提供了豐富的特性和良好的性能。 Yii3是Yii框架的下一代版本,它在Yii2的基礎(chǔ)上進(jìn)一步優(yōu)化了效能和程式碼品質(zhì)。在這篇文章中,我們將介紹如何使用Yii3框架來開發(fā)PHP應(yīng)用程式。

Symfony vs Yii2:哪個(gè)框架比較適合開發(fā)大型Web應(yīng)用? Symfony vs Yii2:哪個(gè)框架比較適合開發(fā)大型Web應(yīng)用? Jun 19, 2023 am 10:57 AM

隨著Web應(yīng)用需求的不斷增長(zhǎng),開發(fā)者在選擇開發(fā)框架方面也越來越有選擇的空間。 Symfony和Yii2是兩個(gè)備受歡迎的PHP框架,它們都具有強(qiáng)大的功能和效能,但在面對(duì)需要開發(fā)大型網(wǎng)路應(yīng)用程式時(shí),哪個(gè)框架更適合呢?接下來我們將對(duì)Symphony和Yii2進(jìn)行比較分析,以幫助你更好地進(jìn)行選擇。基本概述Symphony是一個(gè)由PHP編寫的開源Web應(yīng)用框架,它是建立

如何使用PHP框架Yii開發(fā)一個(gè)高可用的雲(yún)端備份系統(tǒng) 如何使用PHP框架Yii開發(fā)一個(gè)高可用的雲(yún)端備份系統(tǒng) Jun 27, 2023 am 09:04 AM

隨著雲(yún)端運(yùn)算技術(shù)的不斷發(fā)展,資料的備份已經(jīng)成為了每個(gè)企業(yè)必須要做的事情。在這樣的背景下,開發(fā)一款高可用的雲(yún)端備份系統(tǒng)尤其重要。而PHP框架Yii是一款功能強(qiáng)大的框架,可以幫助開發(fā)者快速建立高效能的Web應(yīng)用程式。以下將介紹如何使用Yii框架開發(fā)一款高可用的雲(yún)端備份系統(tǒng)。設(shè)計(jì)資料庫模型在Yii框架中,資料庫模型是非常重要的一環(huán)。因?yàn)橘Y料備份系統(tǒng)需要用到很多的表和關(guān)

php框架laravel和yii區(qū)別是什麼 php框架laravel和yii區(qū)別是什麼 Apr 30, 2025 pm 02:24 PM

Laravel和Yii的主要區(qū)別在於設(shè)計(jì)理念、功能特性和使用場(chǎng)景。 1.Laravel注重開發(fā)的簡(jiǎn)潔和愉悅,提供豐富的功能如EloquentORM和Artisan工具,適合快速開發(fā)和初學(xué)者。 2.Yii強(qiáng)調(diào)性能和效率,適用於高負(fù)載應(yīng)用,提供高效的ActiveRecord和緩存系統(tǒng),但學(xué)習(xí)曲線較陡。

yii與Docker:容器化和部署您的應(yīng)用程序 yii與Docker:容器化和部署您的應(yīng)用程序 Apr 02, 2025 pm 02:13 PM

使用Docker容器化和部署Yii應(yīng)用的步驟包括:1.創(chuàng)建Dockerfile,定義鏡像構(gòu)建過程;2.使用DockerCompose啟動(dòng)Yii應(yīng)用和MySQL數(shù)據(jù)庫;3.優(yōu)化鏡像大小和性能。這不僅涉及到具體的技術(shù)操作,還包括理解Dockerfile的工作原理和最佳實(shí)踐,以確保高效、可靠的部署。

Yii2 vs Symfony:哪個(gè)框架比較適合API開發(fā)? Yii2 vs Symfony:哪個(gè)框架比較適合API開發(fā)? Jun 18, 2023 pm 11:00 PM

隨著網(wǎng)路的快速發(fā)展,API成為了各種應(yīng)用間資料交換的重要方式。因此,開發(fā)一款易於維護(hù)、高效、穩(wěn)定的API框架變得越來越重要。而在選擇API框架時(shí),Yii2和Symfony是兩個(gè)備受開發(fā)者歡迎的選擇。那麼,哪一個(gè)比較適合API開發(fā)呢?本文將對(duì)這兩個(gè)框架進(jìn)行比較,並給出一些結(jié)論。一、基本介紹Yii2和Symfony都是成熟的PHP框架,都有相應(yīng)的擴(kuò)展,可以用來開

See all articles