目錄
yii2源码学习笔记(十),yii2源码学习笔记
首頁 後端開發 php教程 yii2源码学习笔记(十),yii2源码学习笔记_PHP教程

yii2源码学习笔记(十),yii2源码学习笔记_PHP教程

Jul 12, 2016 am 08:51 AM
yii2 了解 學習 原始碼 筆記

yii2源码学习笔记(十),yii2源码学习笔记

继续了解Application.

<span>  1</span>   <span>/*</span><span>*
</span><span>  2</span> <span>     * Registers the errorHandler component as a PHP error handler.
</span><span>  3</span> <span>     * 注册errorHandler组件作为PHP错误处理函数
</span><span>  4</span> <span>     * @param array $config application config  应用程序配置
</span><span>  5</span>      <span>*/</span>
<span>  6</span>     <span>protected</span> function registerErrorHandler(&<span>$config)
</span><span>  7</span> <span>    {
</span><span>  8</span>         <span>if</span> (YII_ENABLE_ERROR_HANDLER) {<span>//</span><span> YII_ENABLE_ERROR_HANDLER在BaseYii中被定义为true</span>
<span>  9</span>             <span>if</span> (!isset($config[<span>'</span><span>components</span><span>'</span>][<span>'</span><span>errorHandler</span><span>'</span>][<span>'</span><span>class</span><span>'</span><span>])) {
</span><span> 10</span>                 <span>//</span><span>$config['components']['errorHandler']['class']不存在结束运行    </span>
<span> 11</span>                 echo <span>"</span><span>Error: no errorHandler component is configured.\n</span><span>"</span><span>;
</span><span> 12</span>                 exit(<span>1</span><span>);
</span><span> 13</span> <span>            }
</span><span> 14</span>             <span>//</span><span>将$config['components']['errorHandler']的内容设置到了$this->_definitions['errorHandler']中</span>
<span> 15</span>             $<span>this</span>-><span>set</span>(<span>'</span><span>errorHandler</span><span>'</span>, $config[<span>'</span><span>components</span><span>'</span>][<span>'</span><span>errorHandler</span><span>'</span><span>]);
</span><span> 16</span>             unset($config[<span>'</span><span>components</span><span>'</span>][<span>'</span><span>errorHandler</span><span>'</span>]);<span>//</span><span> 删除掉配置内容</span>
<span> 17</span>             $<span>this</span>->getErrorHandler()-><span>register();
</span><span> 18</span> <span>        }
</span><span> 19</span> <span>    }
</span><span> 20</span> 
<span> 21</span>     <span>/*</span><span>*
</span><span> 22</span> <span>     * Returns an ID that uniquely identifies this module among all modules within the current application.
</span><span> 23</span> <span>     * Since this is an application instance, it will always return an empty string.
</span><span> 24</span> <span>     * 返回在当前应用程序中该模块的唯一标识。这是一个应用实例,它将返回一个空字符串。
</span><span> 25</span> <span>     * @return string the unique ID of the module.模块的唯一标识。
</span><span> 26</span>      <span>*/</span>
<span> 27</span>     <span>public</span><span> function getUniqueId()
</span><span> 28</span> <span>    {
</span><span> 29</span>         <span>return</span> <span>''</span><span>;
</span><span> 30</span> <span>    }
</span><span> 31</span> 
<span> 32</span>     <span>/*</span><span>*
</span><span> 33</span> <span>     * Sets the root directory of the application and the @app alias.设置应用程序的根目录 @ 加应用程序别名。
</span><span> 34</span> <span>     * This method can only be invoked at the beginning of the constructor.只能在构造函数开始时调用该方法
</span><span> 35</span> <span>     * @param string $path the root directory of the application.应用程序的根目录。
</span><span> 36</span> <span>     * @property string the root directory of the application. 应用程序的根目录。
</span><span> 37</span> <span>     * @throws InvalidParamException if the directory does not exist. 如果目录不存在。抛出异常
</span><span> 38</span>      <span>*/</span>
<span> 39</span>     <span>public</span><span> function setBasePath($path)
</span><span> 40</span> <span>    {
</span><span> 41</span> <span>        parent::setBasePath($path);
</span><span> 42</span>         <span>//</span><span> 使用@app来记录basePath</span>
<span> 43</span>         Yii::setAlias(<span>'</span><span>@app</span><span>'</span>, $<span>this</span>-><span>getBasePath());
</span><span> 44</span> <span>    }
</span><span> 45</span> 
<span> 46</span>     <span>/*</span><span>*
</span><span> 47</span> <span>     * Runs the application.    运行应用程序。
</span><span> 48</span> <span>     * This is the main entrance of an application. 应用程序的主要入口。
</span><span> 49</span> <span>     * @return integer the exit status (0 means normal, non-zero values mean abnormal) 状态(0正常,非0为不正常)
</span><span> 50</span>      <span>*/</span>
<span> 51</span>     <span>public</span><span> function run()
</span><span> 52</span> <span>    {
</span><span> 53</span>         <span>try</span><span> {
</span><span> 54</span> 
<span> 55</span>             $<span>this</span>->state =<span> self::STATE_BEFORE_REQUEST; 
</span><span> 56</span>             $<span>this</span>->trigger(self::EVENT_BEFORE_REQUEST);<span>//</span><span>加载事件函数beforRequest函数</span>
<span> 57</span> 
<span> 58</span>             $<span>this</span>->state =<span> self::STATE_HANDLING_REQUEST;
</span><span> 59</span>             $response = $<span>this</span>->handleRequest($<span>this</span>->getRequest());<span>//</span><span>加载控制器  获取Request对象</span>
<span> 60</span> 
<span> 61</span>             $<span>this</span>->state =<span> self::STATE_AFTER_REQUEST;
</span><span> 62</span>             $<span>this</span>->trigger(self::EVENT_AFTER_REQUEST);<span>//</span><span>加载afterRequest事件函数</span>
<span> 63</span> 
<span> 64</span>             $<span>this</span>->state =<span> self::STATE_SENDING_RESPONSE;
</span><span> 65</span>             $response->send();<span>//</span><span>将页面内容输入缓冲,然后输出</span>
<span> 66</span> 
<span> 67</span>             $<span>this</span>->state =<span> self::STATE_END;
</span><span> 68</span> 
<span> 69</span>             <span>return</span> $response-><span>exitStatus;
</span><span> 70</span> 
<span> 71</span>         } <span>catch</span><span> (ExitException $e) {
</span><span> 72</span>             
<span> 73</span>             $<span>this</span>->end($e->statusCode, isset($response) ? $response : <span>null</span><span>);
</span><span> 74</span>             <span>return</span> $e-><span>statusCode;
</span><span> 75</span> 
<span> 76</span> <span>        }
</span><span> 77</span> <span>    }
</span><span> 78</span> 
<span> 79</span>     <span>/*</span><span>*
</span><span> 80</span> <span>     * Handles the specified request.
</span><span> 81</span> <span>     *  处理指定的请求
</span><span> 82</span> <span>     * This method should return an instance of [[Response]] or its child class
</span><span> 83</span> <span>     * which represents the handling result of the request.
</span><span> 84</span> <span>     *  该方法应该返回一个[[Response]]实例,或者它的子类代表处理请求的结果
</span><span> 85</span> <span>     * @param Request $request the request to be handled    被处理的请求
</span><span> 86</span> <span>     * @return Response the resulting response  得到的响应
</span><span> 87</span>      <span>*/</span>
<span> 88</span>     <span>abstract</span> <span>public</span><span> function handleRequest($request);
</span><span> 89</span> 
<span> 90</span>     <span>private</span><span> $_runtimePath;
</span><span> 91</span> 
<span> 92</span>     <span>/*</span><span>*
</span><span> 93</span> <span>     * Returns the directory that stores runtime files.返回存储运行时文件的路径
</span><span> 94</span> <span>     * @return string the directory that stores runtime files.存储运行时文件的目录。
</span><span> 95</span> <span>     * Defaults to the "runtime" subdirectory under [[basePath]].默认返回[[basePath]]下的 "runtime"目录
</span><span> 96</span>      <span>*/</span>
<span> 97</span>     <span>public</span><span> function getRuntimePath()
</span><span> 98</span> <span>    {
</span><span> 99</span>         <span>if</span> ($<span>this</span>->_runtimePath === <span>null</span>) {<span>//</span><span>设置临时文件存储路径</span>
<span>100</span>             $<span>this</span>->setRuntimePath($<span>this</span>->getBasePath() . DIRECTORY_SEPARATOR . <span>'</span><span>runtime</span><span>'</span><span>);
</span><span>101</span> <span>        }
</span><span>102</span> 
<span>103</span>         <span>return</span> $<span>this</span>-><span>_runtimePath;
</span><span>104</span> <span>    }
</span><span>105</span> 
<span>106</span>     <span>/*</span><span>*
</span><span>107</span> <span>     * Sets the directory that stores runtime files.设置存储运行时文件的路径
</span><span>108</span> <span>     * @param string $path the directory that stores runtime files.存储运行时文件的目录。
</span><span>109</span>      <span>*/</span>
<span>110</span>     <span>public</span><span> function setRuntimePath($path)
</span><span>111</span> <span>    {
</span><span>112</span>         <span>//</span><span> 获取runtimePath的路径,并存到_runtimePath中</span>
<span>113</span>         $<span>this</span>->_runtimePath =<span> Yii::getAlias($path);
</span><span>114</span>          <span>//</span><span> 使用@runtime来记录 runtimePath</span>
<span>115</span>         Yii::setAlias(<span>'</span><span>@runtime</span><span>'</span>, $<span>this</span>-><span>_runtimePath);
</span><span>116</span> <span>    }
</span><span>117</span> 
<span>118</span>     <span>private</span><span> $_vendorPath;
</span><span>119</span> 
<span>120</span>     <span>/*</span><span>*
</span><span>121</span> <span>     * Returns the directory that stores vendor files.返回插件文件的目录。
</span><span>122</span> <span>     * @return string the directory that stores vendor files.
</span><span>123</span> <span>     * Defaults to "vendor" directory under [[basePath]].
</span><span>124</span> <span>     * 默认返回[[basePath]]下的 "vendor" 目录
</span><span>125</span>      <span>*/</span>
<span>126</span>     <span>public</span><span> function getVendorPath()
</span><span>127</span> <span>    {
</span><span>128</span>         <span>if</span> ($<span>this</span>->_vendorPath === <span>null</span><span>) {
</span><span>129</span>             <span>//</span><span> 不存在,就将其设置为basePath/vendor</span>
<span>130</span>             $<span>this</span>->setVendorPath($<span>this</span>->getBasePath() . DIRECTORY_SEPARATOR . <span>'</span><span>vendor</span><span>'</span><span>);
</span><span>131</span> <span>        }
</span><span>132</span> 
<span>133</span>         <span>return</span> $<span>this</span>-><span>_vendorPath;
</span><span>134</span> <span>    }
</span><span>135</span> 
<span>136</span>     <span>/*</span><span>*
</span><span>137</span> <span>     * Sets the directory that stores vendor files.设置插件目录路径,并设置别名
</span><span>138</span> <span>     * @param string $path the directory that stores vendor files.
</span><span>139</span>      <span>*/</span>
<span>140</span>     <span>public</span><span> function setVendorPath($path)
</span><span>141</span> <span>    {
</span><span>142</span>         $<span>this</span>->_vendorPath = Yii::getAlias($path);<span>//</span><span> 获取vendor的路径,并存到_vendorPath中</span>
<span>143</span>         Yii::setAlias(<span>'</span><span>@vendor</span><span>'</span>, $<span>this</span>->_vendorPath);<span>//</span><span> 设置@vendor的alias</span>
<span>144</span>         Yii::setAlias(<span>'</span><span>@bower</span><span>'</span>, $<span>this</span>->_vendorPath . DIRECTORY_SEPARATOR . <span>'</span><span>bower</span><span>'</span><span>);
</span><span>145</span>         Yii::setAlias(<span>'</span><span>@npm</span><span>'</span>, $<span>this</span>->_vendorPath . DIRECTORY_SEPARATOR . <span>'</span><span>npm</span><span>'</span><span>);
</span><span>146</span> <span>    }
</span><span>147</span> 
<span>148</span>     <span>/*</span><span>*
</span><span>149</span> <span>     * Returns the time zone used by this application.取得时区
</span><span>150</span> <span>     * This is a simple wrapper of PHP function date_default_timezone_get().
</span><span>151</span> <span>     * If time zone is not configured in php.ini or application config,
</span><span>152</span> <span>     * it will be set to UTC by default.
</span><span>153</span> <span>     * @return string the time zone used by this application.
</span><span>154</span> <span>     * @see </span><span>http://php.net/manual/en/function.date-default-timezone-get.php</span>
<span>155</span>      <span>*/</span>
<span>156</span>     <span>public</span><span> function getTimeZone()
</span><span>157</span> <span>    {
</span><span>158</span>         <span>return</span><span> date_default_timezone_get();
</span><span>159</span> <span>    }
</span><span>160</span> 
<span>161</span>     <span>/*</span><span>*
</span><span>162</span> <span>     * Sets the time zone used by this application.设置时区
</span><span>163</span> <span>     * This is a simple wrapper of PHP function date_default_timezone_set().
</span><span>164</span> <span>     * Refer to the [php manual](</span><span>http://www.php.net/manual/en/timezones.php</span><span>) for available timezones.
</span><span>165</span> <span>     * @param string $value the time zone used by this application.
</span><span>166</span> <span>     * @see </span><span>http://php.net/manual/en/function.date-default-timezone-set.php</span>
<span>167</span>      <span>*/</span>
<span>168</span>     <span>public</span><span> function setTimeZone($value)
</span><span>169</span> <span>    {
</span><span>170</span> <span>        date_default_timezone_set($value);
</span><span>171</span> <span>    }
</span><span>172</span> 
<span>173</span>     <span>/*</span><span>*
</span><span>174</span> <span>     * Returns the database connection component.返回数据库连接组件
</span><span>175</span> <span>     * @return \yii\db\Connection the database connection.
</span><span>176</span>      <span>*/</span>
<span>177</span>     <span>public</span><span> function getDb()
</span><span>178</span> <span>    {
</span><span>179</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>db</span><span>'</span><span>);
</span><span>180</span> <span>    }
</span><span>181</span> 
<span>182</span>     <span>/*</span><span>*
</span><span>183</span> <span>     * Returns the log dispatcher component.返回日志调度组件
</span><span>184</span> <span>     * @return \yii\log\Dispatcher the log dispatcher application component.
</span><span>185</span>      <span>*/</span>
<span>186</span>     <span>public</span><span> function getLog()
</span><span>187</span> <span>    {
</span><span>188</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>log</span><span>'</span><span>);
</span><span>189</span> <span>    }
</span><span>190</span> 
<span>191</span>     <span>/*</span><span>*
</span><span>192</span> <span>     * Returns the error handler component.返回错误处理组件
</span><span>193</span> <span>     * @return \yii\web\ErrorHandler|\yii\console\ErrorHandler the error handler application component.
</span><span>194</span>      <span>*/</span>
<span>195</span>     <span>public</span><span> function getErrorHandler()
</span><span>196</span> <span>    {
</span><span>197</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>errorHandler</span><span>'</span><span>);
</span><span>198</span> <span>    }
</span><span>199</span> 
<span>200</span>     <span>/*</span><span>*
</span><span>201</span> <span>     * Returns the cache component.返回缓存组件
</span><span>202</span> <span>     * @return \yii\caching\Cache the cache application component. Null if the component is not enabled.
</span><span>203</span>      <span>*/</span>
<span>204</span>     <span>public</span><span> function getCache()
</span><span>205</span> <span>    {
</span><span>206</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>cache</span><span>'</span>, <span>false</span><span>);
</span><span>207</span> <span>    }
</span><span>208</span> 
<span>209</span>     <span>/*</span><span>*
</span><span>210</span> <span>     * Returns the formatter component.返回格式化程序组件
</span><span>211</span> <span>     * @return \yii\i18n\Formatter the formatter application component.
</span><span>212</span>      <span>*/</span>
<span>213</span>     <span>public</span><span> function getFormatter()
</span><span>214</span> <span>    {
</span><span>215</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>formatter</span><span>'</span><span>);
</span><span>216</span> <span>    }
</span><span>217</span> 
<span>218</span>     <span>/*</span><span>*
</span><span>219</span> <span>     * Returns the request component.返回请求的组件对象
</span><span>220</span> <span>     * @return \yii\web\Request|\yii\console\Request the request component.
</span><span>221</span>      <span>*/</span>
<span>222</span>     <span>public</span><span> function getRequest()
</span><span>223</span> <span>    {
</span><span>224</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>request</span><span>'</span><span>);
</span><span>225</span> <span>    }
</span><span>226</span> 
<span>227</span>     <span>/*</span><span>*
</span><span>228</span> <span>     * Returns the response component.返回响应组件
</span><span>229</span> <span>     * @return \yii\web\Response|\yii\console\Response the response component.
</span><span>230</span>      <span>*/</span>
<span>231</span>     <span>public</span><span> function getResponse()
</span><span>232</span> <span>    {
</span><span>233</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>response</span><span>'</span><span>);
</span><span>234</span> <span>    }
</span><span>235</span> 
<span>236</span>     <span>/*</span><span>*
</span><span>237</span> <span>     * Returns the view object.返回视图对象
</span><span>238</span> <span>     * @return View|\yii\web\View the view application component that is used to render various view files.
</span><span>239</span>      <span>*/</span>
<span>240</span>     <span>public</span><span> function getView()
</span><span>241</span> <span>    {
</span><span>242</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>view</span><span>'</span><span>);
</span><span>243</span> <span>    }
</span><span>244</span> 
<span>245</span>     <span>/*</span><span>*
</span><span>246</span> <span>     * Returns the URL manager for this application.返回当前应用的URL管理组件
</span><span>247</span> <span>     * @return \yii\web\UrlManager the URL manager for this application.
</span><span>248</span>      <span>*/</span>
<span>249</span>     <span>public</span><span> function getUrlManager()
</span><span>250</span> <span>    {
</span><span>251</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>urlManager</span><span>'</span><span>);
</span><span>252</span> <span>    }
</span><span>253</span> 
<span>254</span>     <span>/*</span><span>*
</span><span>255</span> <span>     * Returns the internationalization (i18n) component返回国际化组件
</span><span>256</span> <span>     * @return \yii\i18n\I18N the internationalization application component.
</span><span>257</span>      <span>*/</span>
<span>258</span>     <span>public</span><span> function getI18n()
</span><span>259</span> <span>    {
</span><span>260</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>i18n</span><span>'</span><span>);
</span><span>261</span> <span>    }
</span><span>262</span> 
<span>263</span>     <span>/*</span><span>*
</span><span>264</span> <span>     * Returns the mailer component.返回邮件组件
</span><span>265</span> <span>     * @return \yii\mail\MailerInterface the mailer application component.
</span><span>266</span>      <span>*/</span>
<span>267</span>     <span>public</span><span> function getMailer()
</span><span>268</span> <span>    {
</span><span>269</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>mailer</span><span>'</span><span>);
</span><span>270</span> <span>    }
</span><span>271</span> 
<span>272</span>     <span>/*</span><span>*
</span><span>273</span> <span>     * Returns the auth manager for this application.返回该应用的权限管理组件
</span><span>274</span> <span>     * @return \yii\rbac\ManagerInterface the auth manager application component.
</span><span>275</span> <span>     * Null is returned if auth manager is not configured.   管理权限没有配置返回null
</span><span>276</span>      <span>*/</span>
<span>277</span>     <span>public</span><span> function getAuthManager()
</span><span>278</span> <span>    {
</span><span>279</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>authManager</span><span>'</span>, <span>false</span><span>);
</span><span>280</span> <span>    }
</span><span>281</span> 
<span>282</span>     <span>/*</span><span>*
</span><span>283</span> <span>     * Returns the asset manager.返回资源管理组件
</span><span>284</span> <span>     * @return \yii\web\AssetManager the asset manager application component.
</span><span>285</span>      <span>*/</span>
<span>286</span>     <span>public</span><span> function getAssetManager()
</span><span>287</span> <span>    {
</span><span>288</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>assetManager</span><span>'</span><span>);
</span><span>289</span> <span>    }
</span><span>290</span> 
<span>291</span>     <span>/*</span><span>*
</span><span>292</span> <span>     * Returns the security component.返回安全组件
</span><span>293</span> <span>     * @return \yii\base\Security the security application component.
</span><span>294</span>      <span>*/</span>
<span>295</span>     <span>public</span><span> function getSecurity()
</span><span>296</span> <span>    {
</span><span>297</span>         <span>return</span> $<span>this</span>-><span>get</span>(<span>'</span><span>security</span><span>'</span><span>);
</span><span>298</span> <span>    }
</span><span>299</span> 
<span>300</span>     <span>/*</span><span>*
</span><span>301</span> <span>     * Returns the configuration of core application components.返回核心组件的配置
</span><span>302</span> <span>     * @see set()
</span><span>303</span>      <span>*/</span>
<span>304</span>     <span>public</span><span> function coreComponents()
</span><span>305</span> <span>    {
</span><span>306</span>         <span>return</span><span> [
</span><span>307</span>             <span>'</span><span>log</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\log\Dispatcher</span><span>'</span><span>],
</span><span>308</span>             <span>'</span><span>view</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\web\View</span><span>'</span><span>],
</span><span>309</span>             <span>'</span><span>formatter</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\i18n\Formatter</span><span>'</span><span>],
</span><span>310</span>             <span>'</span><span>i18n</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\i18n\I18N</span><span>'</span><span>],
</span><span>311</span>             <span>'</span><span>mailer</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\swiftmailer\Mailer</span><span>'</span><span>],
</span><span>312</span>             <span>'</span><span>urlManager</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\web\UrlManager</span><span>'</span><span>],
</span><span>313</span>             <span>'</span><span>assetManager</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\web\AssetManager</span><span>'</span><span>],
</span><span>314</span>             <span>'</span><span>security</span><span>'</span> => [<span>'</span><span>class</span><span>'</span> => <span>'</span><span>yii\base\Security</span><span>'</span><span>],
</span><span>315</span> <span>        ];
</span><span>316</span> <span>    }
</span><span>317</span> 
<span>318</span>     <span>/*</span><span>*
</span><span>319</span> <span>     * Terminates the application.终止应用程序
</span><span>320</span> <span>     * This method replaces the `exit()` function by ensuring the application life cycle is completed
</span><span>321</span> <span>     * before terminating the application.该方法代替`exit()`  确认一个应用的生命周期已经结束
</span><span>322</span> <span>     * @param integer $status the exit status (value 0 means normal exit while other values mean abnormal exit).
</span><span>323</span> <span>     * @param Response $response the response to be sent. If not set, the default application [[response]] component will be used.
</span><span>324</span> <span>     * @throws ExitException if the application is in testing mode
</span><span>325</span>      <span>*/</span>
<span>326</span>     <span>public</span> function end($status = <span>0</span>, $response = <span>null</span><span>)
</span><span>327</span> <span>    {
</span><span>328</span>         <span>if</span> ($<span>this</span>->state === self::STATE_BEFORE_REQUEST || $<span>this</span>->state ===<span> self::STATE_HANDLING_REQUEST) {
</span><span>329</span>             <span>//</span><span>判断当前状态为请求前或者处理请求</span>
<span>330</span>             $<span>this</span>->state = self::STATE_AFTER_REQUEST;<span>//</span><span>设置应用状态为请求完成后</span>
<span>331</span>             $<span>this</span>-><span>trigger(self::EVENT_AFTER_REQUEST);
</span><span>332</span> <span>        }
</span><span>333</span> 
<span>334</span>         <span>if</span> ($<span>this</span>->state !== self::STATE_SENDING_RESPONSE && $<span>this</span>->state !==<span> self::STATE_END) {
</span><span>335</span>             <span>//</span><span>如果应用状态不是发送应答和应用结束</span>
<span>336</span>             $<span>this</span>->state = self::STATE_END;<span>//</span><span>设置状态为应用结束</span>
<span>337</span>             $response = $response ? : $<span>this</span>-><span>getResponse();
</span><span>338</span>             $response->send();<span>//</span><span>向客户端发送应答</span>
<span>339</span> <span>        }
</span><span>340</span> 
<span>341</span>         <span>if</span><span> (YII_ENV_TEST) {
</span><span>342</span>             <span>throw</span> <span>new</span><span> ExitException($status);
</span><span>343</span>         } <span>else</span><span> {
</span><span>344</span> <span>            exit($status);
</span><span>345</span> <span>        }
</span><span>346</span>     }
登入後複製

 

php

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1131141.htmlTechArticleyii2源码学习笔记(十),yii2源码学习笔记 继续了解Application. 1 /* * 2 * Registers the errorHandler component as a PHP error handler. 3 * 注册errorHandler组件作...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1253
24
小紅書筆記怎麼刪除 小紅書筆記怎麼刪除 Mar 21, 2024 pm 08:12 PM

小紅書筆記怎麼刪除?在小紅書APP中是可以編輯筆記的,多數的用戶不知道小紅書筆記如何的刪除,接下來就是小編為用戶帶來的小紅書筆記刪除方法圖文教程,有興趣的用戶快來一起看看吧!小紅書使用教學小紅書筆記怎麼刪除1、先打開小紅書APP進入到主頁面,選擇右下角【我】進入到專區;2、之後在我的專區,點擊下圖所示的筆記頁面,選擇要刪除的筆記;3、進入到筆記頁面,右上角【三個點】;4、最後下方會展開功能欄,點選【刪除】即可完成。

小紅書發布過的筆記不見了怎麼辦?它剛發的筆記搜不到的原因是什麼? 小紅書發布過的筆記不見了怎麼辦?它剛發的筆記搜不到的原因是什麼? Mar 21, 2024 pm 09:30 PM

作為一名小紅書的用戶,我們都曾經遇到過發布過的筆記突然不見了的情況,這無疑讓人感到困惑和擔憂。在這種情況下,我們該怎麼辦呢?本文將圍繞著「小紅書發布過的筆記不見了怎麼辦」這個主題,為你詳細解答。一、小紅書發布過的筆記不見了怎麼辦?首先,不要驚慌。如果你發現筆記不見了,保持冷靜是關鍵,不要慌張。這可能是由於平台系統故障或操作失誤引起的。檢查發布記錄很簡單。只要打開小紅書App,點擊“我”→“發布”→“所有發布”,就可以查看自己的發布記錄。在這裡,你可以輕鬆找到之前發布的筆記。 3.重新發布。如果找到了之

小紅書怎麼在筆記中加入商品連結 小紅書在筆記中加入商品連結教學 小紅書怎麼在筆記中加入商品連結 小紅書在筆記中加入商品連結教學 Mar 12, 2024 am 10:40 AM

小紅書怎麼在筆記中添加商品連結?在小紅書這款app中用戶不僅可以瀏覽各種內容還可以進行購物,所以這款app中關於購物推薦、好物分享的內容是非常多的,如果小夥伴在這款app也是一個達人的話,也可以分享一些購物經驗,找到商家進行合作,在筆記中添加連結之類的,很多人都願意使用這款app購物,因為不僅方便,而且有很多達人會進行一些推薦,可以一邊瀏覽有趣內容,一邊看看有沒有適合自己的衣服商品。一起看看如何在筆記中添加商品連結吧!小紅書筆記添加商品連結方法  在手機桌面上開啟app。  在app首頁點擊

Pygame入門指南:全面安裝與設定教學課程 Pygame入門指南:全面安裝與設定教學課程 Feb 19, 2024 pm 10:10 PM

從零開始學習Pygame:完整的安裝和配置教程,需要具體程式碼範例引言:Pygame是一個使用Python程式語言開發的開源遊戲開發庫,它提供了豐富的功能和工具,使得開發者可以輕鬆創建各種類型的遊戲。本文將帶您從零開始學習Pygame,並提供完整的安裝和配置教程,以及具體的程式碼範例,讓您快速入門。第一部分:安裝Python和Pygame首先,確保您的電腦上已

揭秘C語言的吸引力: 發掘程式設計師的潛質 揭秘C語言的吸引力: 發掘程式設計師的潛質 Feb 24, 2024 pm 11:21 PM

學習C語言的魅力:解鎖程式設計師的潛力隨著科技的不斷發展,電腦程式設計已經成為了一個備受關注的領域。在眾多程式語言中,C語言一直以來都備受程式設計師的喜愛。它的簡單、高效以及廣泛應用的特點,使得學習C語言成為了許多人進入程式設計領域的第一步。本文將討論學習C語言的魅力,以及如何透過學習C語言來解鎖程式設計師的潛力。首先,學習C語言的魅力在於其簡潔性。相較於其他程式語言而言,C語

一起學習word根號輸入方法 一起學習word根號輸入方法 Mar 19, 2024 pm 08:52 PM

在word編輯文字內容時,有時會需要輸入公式符號。有的小夥子們不知道在word根號輸入的方法,小面就讓小編跟小夥伴們一起分享下word根號輸入的方法教學。希望對小夥伴們有幫助。首先,開啟電腦上的Word軟體,然後開啟要編輯的文件,並將遊標移到需要插入根號的位置,參考下方的圖片範例。 2.選擇【插入】,再選擇符號裡的【公式】。如下方圖片紅色圈的部分內容所示:3.接著選擇下方的【插入新公式】。如下方圖片紅色圈的部分內容所示:4.選擇【根式】,再選擇適當的根號。如下方圖片紅色圈的部分內容所示:

一目了然:JSP檔案開啟的方法速覽 一目了然:JSP檔案開啟的方法速覽 Jan 31, 2024 pm 09:28 PM

JSP檔案開啟方式JSP(JavaServerPages)是一種動態網頁技術,它允許程式設計師在HTML頁面中嵌入Java程式碼。 JSP檔案是一個文字文件,其中包含HTML程式碼、XML標記和Java程式碼。當JSP檔案被要求時,它會被編譯成JavaServlet,然後由Web伺服器執行。開啟JSP檔案的方法有幾種方法可以開啟JSP檔案。最簡單的方法是使用文字編輯器,

Go語言和Golang之間的差異:你清楚嗎? Go語言和Golang之間的差異:你清楚嗎? Feb 24, 2024 pm 06:06 PM

Go和Golang是同一種程式語言,它們之間沒有實質的區別。 Go是該程式語言的正式名稱,而Golang則是Go語言開發者在網路領域中常用的簡稱。在本文中,我們將探討Go語言的特點、用途,以及一些具體的程式碼範例,幫助讀者更了解這門強大的程式語言。 Go語言是由Google開發的靜態編譯型程式語言,具有高效、簡潔、並發性強的特點,旨在提高程式設計師的工作效

See all articles