20.Yii 工作流

这里写图片描述
这里写图片描述
这里写图片描述


1. 应用程序统一入口文件 index.php
这里写图片描述


2.创建一个 web 应用并执行
这里写图片描述
这里写图片描述

CConsoleApplication, CWebApplication 都继承了 CApplication
初始化应用时,将配置文件的名字作为参数传递给应用的构造器

这里写图片描述

Tip|提示: 如果应用配置非常复杂,我们可以把它分割为若干文件,每个文件返回配置数组中的一部分。 
然后,在主配置文件中,我们调用PHPinclude() 包含其余的配置文件并把它们合并为一个完整的配置数组
初始化应用要干的事情:

 1. 设置 bashPath
 2. 设置 别名
 3. 通过 [CApplication::preinit()] 预初始化应用
 4. 设置类的自动装载器和错误处理
 5. 注册核心类组件
 6. 加载应用配置
 7. 通过 [CApplication::init()] 初始化应用:
        注册应用行为;
        载入静态应用组件
 8. 触发 [onBeginRequest|CApplication::onBeginRequest] 事件
 9. 处理用户请求
        解析用户请求;
        创建控制器;
        运行控制器;
 10. 触发 [onEndRequest|CApplication::onEndRequest] 事件

这里写图片描述

public function __construct($config=null)
    {
        Yii::setApplication($this);

        // set basePath at early as possible to avoid trouble
        if(is_string($config)) {
            $config=require($config);
        }

        if(isset($config['basePath']))
        {
            $this->setBasePath($config['basePath']);
            unset($config['basePath']);
        }
        else {
            $this->setBasePath('protected');
        }

        Yii::setPathOfAlias('application',$this->getBasePath());
        Yii::setPathOfAlias('webroot',dirname($_SERVER['SCRIPT_FILENAME']));
        if(isset($config['extensionPath']))
        {
            $this->setExtensionPath($config['extensionPath']);
            unset($config['extensionPath']);
        }
        else {
            Yii::setPathOfAlias('ext',$this->getBasePath().DIRECTORY_SEPARATOR.'extensions');
        }
        if(isset($config['aliases']))
        {
            $this->setAliases($config['aliases']);
            unset($config['aliases']);
        }

        $this->preinit();// 1.通过 [CApplication::preinit()] 预初始化应用;

        $this->initSystemHandlers(); // 2.设置类的自动装载器和错误处理;
        $this->registerCoreComponents(); // 3.注册核心类组件;

        $this->configure($config); // 4.加载应用配置;
        $this->attachBehaviors($this->behaviors);
        $this->preloadComponents();

        $this->init(); // 5.通过 [CApplication::init()] 初始化应用:
    }

3.处理请求
这里写图片描述

前端控制器里面的 路由:
这里写图片描述

创建控制器:
这里写图片描述

方法控制器里的 路由:
这里写图片描述

创建方法:
这里写图片描述

选择是否加载filter:
这里写图片描述
这里写图片描述


有 filter 的情况:
这里写图片描述
这里写图片描述

public static function create($controller,$action,$filters)
    {
        $chain=new CFilterChain($controller,$action);

        $actionID=$action->getId();
        foreach($filters as $filter)
        {
            if(is_string($filter))  // filterName [+|- action1 action2]
            {
                if(($pos=strpos($filter,'+'))!==false || ($pos=strpos($filter,'-'))!==false)
                {
                    $matched=preg_match("/\b{$actionID}\b/i",substr($filter,$pos+1))>0;
                    if(($filter[$pos]==='+')===$matched)
                        $filter=CInlineFilter::create($controller,trim(substr($filter,0,$pos)));
                }
                else
                    $filter=CInlineFilter::create($controller,$filter);
            }
            elseif(is_array($filter))  // array('path.to.class [+|- action1, action2]','param1'=>'value1',...)
            {
                if(!isset($filter[0]))
                    throw new CException(Yii::t('yii','The first element in a filter configuration must be the filter class.'));
                $filterClass=$filter[0];
                unset($filter[0]);
                if(($pos=strpos($filterClass,'+'))!==false || ($pos=strpos($filterClass,'-'))!==false)
                {
                    $matched=preg_match("/\b{$actionID}\b/i",substr($filterClass,$pos+1))>0;
                    if(($filterClass[$pos]==='+')===$matched)
                        $filterClass=trim(substr($filterClass,0,$pos));
                    else
                        continue;
                }
                $filter['class']=$filterClass;
                $filter=Yii::createComponent($filter);
            }

            if(is_object($filter))
            {
                $filter->init();
                $chain->add($filter);
            }
        }
        return $chain;

运行 filter :
这里写图片描述
这里写图片描述

Filter 钩子:
这里写图片描述

不含 filter:
这里写图片描述
这里写图片描述

通过php反射处理action参数:
这里写图片描述

这里写图片描述


这里写图片描述



http://www.yiichina.com/doc/guide/1.1/basics.application

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值