Maison  >  Article  >  php教程  >  yii2源码学习笔记(十)

yii2源码学习笔记(十)

WBOY
WBOYoriginal
2016-06-06 09:32:34770parcourir

继续了解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

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:PHP文件上传及下载源码Article suivant:PHP 优化详解