Application 分析
来源:互联网 发布:日本家电淘宝 编辑:程序博客网 时间:2024/06/06 01:04
<?php/** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */namespace yii\web;use Yii;use yii\helpers\Url;use yii\base\InvalidRouteException;/** * Application is the base class for all web application classes. * * For more details and usage information on Application, see the [guide article on applications](guide:structure-applications). * * @property ErrorHandler $errorHandler The error handler application component. This property is read-only. * @property string $homeUrl The homepage URL. * @property Request $request The request component. This property is read-only. * @property Response $response The response component. This property is read-only. * @property Session $session The session component. This property is read-only. * @property User $user The user component. This property is read-only. * * @author Qiang Xue <qiang.xue@gmail.com> * @since 2.0 */class Application extends \yii\base\Application{ /** * @var string the default route of this application. Defaults to 'site'. */ public $defaultRoute = 'site'; /** * @var array the configuration specifying a controller action which should handle * all user requests. This is mainly used when the application is in maintenance mode * and needs to handle all incoming requests via a single action. * The configuration is an array whose first element specifies the route of the action. * The rest of the array elements (key-value pairs) specify the parameters to be bound * to the action. For example, * * ```php * [ * 'offline/notice', * 'param1' => 'value1', * 'param2' => 'value2', * ] * ``` * * Defaults to null, meaning catch-all is not used. */ public $catchAll; /** * @var Controller the currently active controller instance */ public $controller; /** * @inheritdoc * 引导程序 */ protected function bootstrap() { $request = $this->getRequest();//请求参数 Yii::setAlias('@webroot', dirname($request->getScriptFile())); //设置别名 webroot Yii::setAlias('@web', $request->getBaseUrl()); //设置别名 web //调用父类 引导程序 parent::bootstrap(); } /** * Handles the specified request. 处理请求 * @param Request $request the request to be handled * @return Response the resulting response * @throws NotFoundHttpException if the requested route is invalid */ public function handleRequest($request) { if (empty($this->catchAll)) { try { //解析当前请求到路由和参数 list ($route, $params) = $request->resolve(); } catch (UrlNormalizerRedirectException $e) { $url = $e->url; if (is_array($url)) { if (isset($url[0])) { // ensure the route is absolute $url[0] = '/' . ltrim($url[0], '/'); } $url += $request->getQueryParams(); } //解析失败 跳转 带状态码 return $this->getResponse()->redirect(Url::to($url, $e->scheme), $e->statusCode); } } else { $route = $this->catchAll[0]; $params = $this->catchAll; unset($params[0]); } try { //记录请求路由和方法到日志 Yii::trace("Route requested: '$route'", __METHOD__); $this->requestedRoute = $route; //根据路由执行controller的方法 $result = $this->runAction($route, $params); if ($result instanceof Response) { //如果是Response 的实例 就直接返回 return $result; } else { //如果不是Response 的实例 就获取响应 $response = $this->getResponse(); if ($result !== null) { $response->data = $result; } return $response; } } catch (InvalidRouteException $e) { throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'), $e->getCode(), $e); } } private $_homeUrl; /** * @return string the homepage URL */ public function getHomeUrl() { if ($this->_homeUrl === null) { if ($this->getUrlManager()->showScriptName) { return $this->getRequest()->getScriptUrl(); } else { return $this->getRequest()->getBaseUrl() . '/'; } } else { return $this->_homeUrl; } } /** * 设置_homeUrl * @param string $value the homepage URL */ public function setHomeUrl($value) { $this->_homeUrl = $value; } /** * Returns the error handler component. * @return ErrorHandler the error handler application component. */ public function getErrorHandler() { return $this->get('errorHandler'); } /** * Returns the request component. * @return Request the request component. */ public function getRequest() { return $this->get('request'); } /** * Returns the response component. * @return Response the response component. */ public function getResponse() { return $this->get('response'); } /** * Returns the session component. * @return Session the session component. */ public function getSession() { return $this->get('session'); } /** * Returns the user component. * @return User the user component. */ public function getUser() { return $this->get('user'); } /** * 设置核心组件 * @inheritdoc */ public function coreComponents() { return array_merge(parent::coreComponents(), [ 'request' => ['class' => 'yii\web\Request'], 'response' => ['class' => 'yii\web\Response'], 'session' => ['class' => 'yii\web\Session'], 'user' => ['class' => 'yii\web\User'], 'errorHandler' => ['class' => 'yii\web\ErrorHandler'], ]); }}
阅读全文
0 0
- Application 分析
- POCO的Application分析
- Sample Application分析(1)
- Android Application分析
- Android Application 深入分析
- 【android】Application 使用分析
- tornado源码分析-Application
- Android中Application分析
- Application源码分析
- COCOS2D-3.9 Application分析
- Application.mk浅分析
- Application初始化源码分析
- web.py源码分析: application
- web.py源码分析: application
- web.py源码分析: application
- Framework分析-Application的onCreate
- Framework分析-Application的onCreate
- <OPTEE>Trusted Application结构分析
- Maven引入第三方Jar包依赖-验证码例子
- hibernate
- linux c获取long类型最大值
- Java学习心得
- Python爬虫实战(五) :下载百度贴吧帖子里的所有图片
- Application 分析
- Android开发者e周报 第5期
- (5-III) 机器人手眼标定(手眼标定系列-仅限内部学员) (黑土 Q
- 2017年随笔
- aiax defferred对象
- 成功劫持android的屏幕
- 解读MCE(Machine Check Exception)和Intel CSR寄存器(configuration Registers)的代码含义工具
- shiro(五)默认拦截器
- Python爬虫实战(六):爬取糗事百科段子