목차
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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Xiaohongshu 메모를 삭제하는 방법 Xiaohongshu 메모를 삭제하는 방법 Mar 21, 2024 pm 08:12 PM

Xiaohongshu 메모를 삭제하는 방법 Xiaohongshu 앱에서 메모를 편집할 수 있습니다. 다음으로 편집기는 Xiaohongshu 메모 삭제 방법에 대한 사용자 사진과 텍스트를 가져옵니다. 보세요! Xiaohongshu 사용 튜토리얼 Xiaohongshu 메모 삭제 방법 1. 먼저 Xiaohongshu 앱을 열고 메인 페이지로 들어가서 오른쪽 하단에 있는 [Me]를 선택하여 특별 영역으로 들어갑니다. 2. 그런 다음 내 영역에서 다음과 같이 메모 페이지를 클릭합니다. 3. 노트 페이지에 들어가서 오른쪽 상단에 있는 [점 3개]를 클릭합니다. 4. 마지막으로 기능 표시줄이 하단에 확장되고 [삭제]를 클릭하여 완료합니다.

Xiaohongshu에 게시한 메모가 누락된 경우 어떻게 해야 합니까? 방금 보낸 메모를 찾을 수 없는 이유는 무엇인가요? Xiaohongshu에 게시한 메모가 누락된 경우 어떻게 해야 합니까? 방금 보낸 메모를 찾을 수 없는 이유는 무엇인가요? Mar 21, 2024 pm 09:30 PM

Xiaohongshu 사용자로서 우리 모두는 게시된 노트가 갑자기 사라지는 상황을 경험해 본 적이 있을 것입니다. 이는 의심할 여지 없이 혼란스럽고 걱정스러운 일입니다. 이런 경우, 우리는 어떻게 해야 합니까? 이번 글에서는 "샤오홍슈에서 발행한 노트가 누락된 경우 어떻게 해야 할까요?"라는 주제를 중심으로 자세한 답변을 드리겠습니다. 1. Xiaohongshu에서 발행한 노트가 누락된 경우 어떻게 해야 합니까? 첫째, 당황하지 마십시오. 메모가 누락된 경우 침착함을 유지하는 것이 중요하며 당황하지 마십시오. 이는 플랫폼 시스템 장애 또는 운영 오류로 인해 발생할 수 있습니다. 출시 기록을 확인하는 것은 쉽습니다. Xiaohongshu 앱을 열고 "나" → "게시" → "모든 출판물"을 클릭하면 자신의 출판 기록을 볼 수 있습니다. 여기에서는 이전에 게시된 메모를 쉽게 찾을 수 있습니다. 3.다시 게시합니다. 발견된 경우

Xiaohongshu의 노트에 제품 링크를 추가하는 방법 Xiaohongshu의 노트에 제품 링크를 추가하는 방법에 대한 튜토리얼 Xiaohongshu의 노트에 제품 링크를 추가하는 방법 Xiaohongshu의 노트에 제품 링크를 추가하는 방법에 대한 튜토리얼 Mar 12, 2024 am 10:40 AM

Xiaohongshu 노트에 제품 링크를 추가하는 방법 Xiaohongshu 앱에서는 사용자가 다양한 콘텐츠를 탐색할 수 있을 뿐만 아니라 쇼핑도 할 수 있기 때문에 이 앱에는 쇼핑 추천 및 좋은 제품 공유에 대한 콘텐츠가 많이 있습니다. 이 앱에서는 일부 쇼핑 경험을 공유하고, 협력할 판매자를 찾고, 메모에 링크를 추가하는 등의 작업도 할 수 있습니다. 이 앱은 편리할 뿐만 아니라 많은 전문가가 만들 수 있기 때문에 많은 사람들이 쇼핑에 기꺼이 이 앱을 사용합니다. 흥미로운 콘텐츠를 탐색하고 자신에게 맞는 의류 제품이 있는지 확인할 수 있습니다. 노트에 제품 링크를 추가하는 방법을 살펴보겠습니다. 샤오홍슈 노트에 제품 링크를 추가하는 방법 휴대폰 데스크톱에서 앱을 엽니다. 앱 홈페이지를 클릭하세요

C 언어의 매력을 밝히다: 프로그래머의 잠재력을 발견하다 C 언어의 매력을 밝히다: 프로그래머의 잠재력을 발견하다 Feb 24, 2024 pm 11:21 PM

C 언어 학습의 매력: 프로그래머의 잠재력을 여는 것 지속적인 기술 발전으로 컴퓨터 프로그래밍은 많은 주목을 받는 분야가 되었습니다. 많은 프로그래밍 언어 중에서 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으로 컴파일된 후 웹 서버에서 실행됩니다. JSP 파일을 여는 방법 JSP 파일을 여는 방법에는 여러 가지가 있습니다. 가장 쉬운 방법은 텍스트 편집기를 사용하는 것입니다.

Pygame 시작하기: 종합적인 설치 및 구성 튜토리얼 Pygame 시작하기: 종합적인 설치 및 구성 튜토리얼 Feb 19, 2024 pm 10:10 PM

처음부터 Pygame 배우기: 전체 설치 및 구성 튜토리얼, 특정 코드 예제 필요 소개: Pygame은 Python 프로그래밍 언어를 사용하여 개발된 오픈 소스 게임 개발 라이브러리로, 개발자가 다양한 유형을 쉽게 만들 수 있도록 풍부한 기능과 도구를 제공합니다. 게임의. 이 기사는 처음부터 Pygame을 배우는 데 도움이 될 것이며, 완전한 설치 및 구성 튜토리얼과 빠른 시작을 위한 특정 코드 예제를 제공할 것입니다. 1부: Python 및 Pygame 설치 먼저 다음 사항을 확인하세요.

워드에서 근수를 입력하는 방법을 함께 알아볼까요? 워드에서 근수를 입력하는 방법을 함께 알아볼까요? 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