二十二、逐行阅读Yii2.0.43源码_Yii框架文件yii\web\Application.php

目录

一、属性

 二、方法


yii\web\Application类继承yii\base\Application。

一、属性

1. $defaultRoute 默认路由

2. $catchAll 指定的一个控制住操作,当应用处于维护模式时,用来处理所有请求

3. $controller 当前控制器实例

4. $_homeUrl 主页url

    // 应用的默认路由
    public $defaultRoute = 'site';

    //指定的一个控制住操作,当应用处于维护模式时,
    //用来处理所有请求
    public $catchAll;

    //当前控制器实例
    public $controller;

    // 主页url
    private $_homeUrl;

 二、方法

1. bootstrap方法,启动方法

  •  获取请求实例
  • 设置别名
  • 初始化配置,加载引导组件
    /**
     * 启动方法
     */
    protected function bootstrap()
    {
        //请求示例
        $request = $this->getRequest();

        //别名设置
        Yii::setAlias('@webroot', dirname($request->getScriptFile()));
        Yii::setAlias('@web', $request->getBaseUrl());

        //调用父类的bootstrap,
        //这个方法初始化配置和加载引导组件
        parent::bootstrap();
    }

 2.handleRequest方法,处理请求

  • 从url中解析路由和参数
  • 执行请求
  • 响应请求,返回结果
    /**
     * 处理请求
     */
    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::debug("Route requested: '$route'", __METHOD__);
            $this->requestedRoute = $route;

            //处理请求的方法
            $result = $this->runAction($route, $params);
            if ($result instanceof Response) {
                return $result;
            }

            $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);
        }
    }

3. getHomeUrl方法,返回主页url

    /**
     * 返回主页url
     */
    public function getHomeUrl()
    {
        if ($this->_homeUrl === null) {
            if ($this->getUrlManager()->showScriptName) {
                return $this->getRequest()->getScriptUrl();
            }

            return $this->getRequest()->getBaseUrl() . '/';
        }

        return $this->_homeUrl;
    }

4.setHomeURL方法,设置主页url

    /**
     * 设置主页
     */
    public function setHomeUrl($value)
    {
        $this->_homeUrl = $value;
    }

5.getErrorHandler方法,返回错误处理组件

    /**
     * 错误处理组件
     */
    public function getErrorHandler()
    {
        return $this->get('errorHandler');
    }

6.getRequest方法,返回请求组件

    /**
     * 请求组件
     */
    public function getRequest()
    {
        return $this->get('request');
    }

 7.getResponse方法,返回响应组件实例

    /**
     * 响应组件
     */
    public function getResponse()
    {
        return $this->get('response');
    }

8. getSession方法,返回session组件实例

    /**
     * session组件
     */
    public function getSession()
    {
        return $this->get('session');
    }

9. getUser方法,返回user实例

    /**
     * user组件
     */
    public function getUser()
    {
        return $this->get('user');
    }

10.coreComponents方法,返回组件配置数组

    /**
     * 返回组件数组配置
     */
    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'],
        ]);
    }

总结:

阅读了4个属性和10个方法:

  • $defaultRoute 默认路由
  • $catchAll 指定的一个控制住操作,当应用处于维护模式时,用来处理所有请求
  • $controller 当前控制器实例
  • $_homeUrl 主页url
  • bootstrap方法,启动方法
  • handleRequest方法,处理请求
  • getHomeUrl方法,返回主页url
  • setHomeURL方法,设置主页url
  • getErrorHandler方法,返回错误处理组件
  • getRequest方法,返回请求组件
  • getResponse方法,返回响应组件实例
  • getSession方法,返回session组件实例
  • getUser方法,返回user实例
  • coreComponents方法,返回组件配置数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值