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