目录
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脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 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)

小红书笔记怎么删除 小红书笔记怎么删除 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首页点击

揭秘C语言的吸引力: 发掘程序员的潜质 揭秘C语言的吸引力: 发掘程序员的潜质 Feb 24, 2024 pm 11:21 PM

学习C语言的魅力:解锁程序员的潜力随着科技的不断发展,计算机编程已经成为了一个备受关注的领域。在众多编程语言中,C语言一直以来都备受程序员的喜爱。它的简单、高效以及广泛应用的特点,使得学习C语言成为了许多人进入编程领域的第一步。本文将讨论学习C语言的魅力,以及如何通过学习C语言来解锁程序员的潜力。首先,学习C语言的魅力在于其简洁性。相比其他编程语言而言,C语

一目了然:JSP文件打开的方法速览 一目了然:JSP文件打开的方法速览 Jan 31, 2024 pm 09:28 PM

JSP文件打开方式JSP(JavaServerPages)是一种动态网页技术,它允许程序员在HTML页面中嵌入Java代码。JSP文件是文本文件,其中包含HTML代码、XML标记和Java代码。当JSP文件被请求时,它会被编译成JavaServlet,然后由Web服务器执行。打开JSP文件的方法有几种方法可以打开JSP文件。最简单的方法是使用文本编辑器,

Pygame入门指南:全面安装和配置教程 Pygame入门指南:全面安装和配置教程 Feb 19, 2024 pm 10:10 PM

从零开始学习Pygame:完整的安装和配置教程,需要具体代码示例引言:Pygame是一个使用Python编程语言开发的开源游戏开发库,它提供了丰富的功能和工具,使得开发者可以轻松创建各种类型的游戏。本文将带您从零开始学习Pygame,并提供完整的安装和配置教程,以及具体的代码示例,让您快速入门。第一部分:安装Python和Pygame首先,确保您的计算机上已

一起学习word根号输入办法 一起学习word根号输入办法 Mar 19, 2024 pm 08:52 PM

在word中编辑文字内容时,有时会需要输入公式符号。有的小伙们不知道在word根号输入的方法,小面就让小编跟小伙伴们一起分享下word根号输入的方法教程。希望对小伙伴们有所帮助。首先,打开电脑上的Word软件,然后打开要编辑的文件,并将光标移动到需要插入根号的位置,参考下方的图片示例。2.选择【插入】,再选择符号里的【公式】。如下方的图片红色圈中部分内容所示:3.接着选择下方的【插入新公式】。如下方的图片红色圈中部分内容所示:4.选择【根式】,再选择合适的根号。如下方的图片红色圈中部分内容所示:

PHP代码在浏览器中如何显示源码而不被解释执行? PHP代码在浏览器中如何显示源码而不被解释执行? Mar 11, 2024 am 10:54 AM

PHP代码在浏览器中如何显示源码而不被解释执行?PHP是一种服务器端脚本语言,通常用于开发动态网页。当PHP文件在服务器上被请求时,服务器会解释执行其中的PHP代码,并将最终的HTML内容发送到浏览器以供显示。然而,有时我们希望在浏览器中直接展示PHP文件的源代码,而不是被执行。本文将介绍如何在浏览器中显示PHP代码的源码,而不被解释执行。在PHP中,可以使

See all articles