• Yii 应用的静态结构

应用:

  • require可以有返回值,Yii中经常返回数组用以配置。以前只知道引用文件成功返回1。
  • controllerMap属性允许你指定一个控制器ID到任意控制器类,修改配置文件: 'controllerMap'=>[ 'site'=>'app\controllers\SiteonionController', ], 控制器Site就对应到控制器类:app\controllers\SiteonionController

  • name属性指定你可能想展示给终端用户的应用名称,如果其他地方的代码没有用到,可以不配置该属性。'name' => 'xxxx’,咦去哪了呢在哪能看到?,在调试器里面看到了:
  • \Yii::$app可以访问这些数据,也可修改,\Yii:$app是左值。(应用主体在 入口脚本 中创建并能通过表达式\Yii::$app 全局范围内访问,应用主体是管理 Yii 应用系统整体结构和生命周期的对象。)
    var_dump(\Yii::$app); //访问所有对象和属性
    echo \Yii::$app->name.'<br/>'; //访问上面添加的name,输出:卢西恩.佛洛伊德生于1922年…
    \Yii::$app->name='维果斯基(Lev Vygotsky,1896-1934)亦有翻译为维果茨基,前苏联心理学家,“文化-历史”理论的创始人。';//修改name变量
    echo \Yii::$app->name.'<br/>'; //修改后的,输出:维果斯基…
    echo \Yii::$app->params['adminEmail'].'<br/>'; //访问params.php文件返回的数组$params中的adminEmail配置。 因为web.php顶部默认取$params = require(__DIR__ . '/params.php'); 
  • timeZone设置时区

    echo 'default zone('.\Yii::$app->timeZone.'):'.date('Y-m-d H:i:s',time()).'<br/>';
    \Yii::$app->timeZone='Asia/Shanghai';
    echo 'now zone('.\Yii::$app->timeZone.'):'.date('Y-m-d H:i:s',time()).'<br/>';
    /* 输出
    default zone(Europe/Paris):2016-12-14 06:55:46 //默认时区是Paris可能是apache问题
    now zone(Asia/Shanghai):2016-12-14 13:55:46
    */
  • layout布局路径和layoutPath视图路径,yii\base\Application::layout 属性指定渲染视图默认使用的布局名字, yii\base\Application::layoutPath 属性指定查找布局文件的路径,默认为@app/views/layouts/main.php 文件 修改配置文件:

    'layout'=>'mainview',
    'layoutPath'=>'@app/views/onion',
    

    就使用@app/views/onion/mainview.php 文件渲染视图。p.s.视图路径也是可以更改的(yii\base\Application::viewPath 路径指定视图文件的根目录,默认值为带别名的 @app/views)

  • on beforeRequest (应用事件),应用在处理请求过程中会触发事件,例如把上一篇文章的paths()函数放这里,来输出到控制台

    function paths(){
        $pathsarr=array(
            '当前请求的 Host:'=>$_SERVER["HTTP_HOST"],
            '请求执行文件的相对地址:'=>$_SERVER["PHP_SELF"],
            '实际执行文件相对地址:'=>$_SERVER["SCRIPT_NAME"],
            '实际执行文件的绝对路径:'=>$_SERVER["SCRIPT_FILENAME"],
            '实际执行代码的绝对路径:'=>__FILE__,
            'url请求中包括/和之后的所有内容:'=>$_SERVER["REQUEST_URI"],
            'url请求中?之后的内容:'=>$_SERVER["QUERY_STRING"],
            '文档根目录:'=>$_SERVER["DOCUMENT_ROOT"],
            '请求执行文件的的文件名:'=>basename($_SERVER["PHP_SELF"]),
            '实际执行文件的文件名:'=>basename($_SERVER["SCRIPT_NAME"]),
            '实际执行文件的文件名:'=>basename($_SERVER["SCRIPT_FILENAME"]),
            '实际执行代码的文件名:'=>basename(__FILE__),
            '请求执行文件的的所在目录:'=>dirname($_SERVER["PHP_SELF"]),
            '实际执行文件的所在目录:'=>dirname($_SERVER["SCRIPT_NAME"]),
            '实际执行文件的所在目录:'=>dirname($_SERVER["SCRIPT_FILENAME"]),
            '实际执行代码的所在目录:'=>dirname(__FILE__),
            'dir(同↑):'=>__DIR__
        );
        return $pathsarr;
    }
    ......
    if (YII_ENV_DEV) {
        $config['on beforeRequest']=function ($event){
            $pathtemp=paths();
            foreach($pathtemp as $k=>$v){
                $v=str_replace("\\","\\\\",$v);//反斜杠\,在console里没有显示,转换成\\显示
                echo "<script>console.log('{$k}{$v}')</script>";
            }
        };
    ......

    放到if(YII_ENV_DEV)下,意图旨在开发环境下再输出显示:

      

  • 应用主体生命周期  


       p.s. Register error handler,我以为就是注册错误句柄,搜了一下handler,发现(handler和句柄完全不是一回事,句柄的英文是handle,handler是处理程序的意思),再结合手册中的,这里确实应该是处理程序。Handle Request则用了处理(handle)。

    
    

    当运行 入口脚本 处理请求时, 应用主体会经历以下生命周期:

    1. 入口脚本加载应用主体配置数组。
    2. 入口脚本创建一个应用主体实例:
      • 调用 yii\base\Application::preInit() 配置几个高级别应用主体属性, 比如yii\base\Application::basePath。
      • 注册 yii\base\Application::errorHandler 错误处理方法.
      • 配置应用主体属性.
      • 调用 yii\base\Application::init() 初始化, 该函数会调用 yii\base\Application::bootstrap() 运行引导启动组件.
    3. 入口脚本调用 yii\base\Application::run() 运行应用主体:
      • 触发 yii\base\Application::EVENT_BEFORE_REQUEST 事件。
      • 处理请求:解析请求 路由 和相关参数; 创建路由指定的模块、控制器和动作对应的类,并运行动作。
      • 触发 yii\base\Application::EVENT_AFTER_REQUEST 事件。
      • 发送响应到终端用户.
    4. 入口脚本接收应用主体传来的退出状态并完成请求的处理。                      by http://www.yiichina.com/doc/guide/2.0/structure-applications

Yii入门☞应用的更多相关文章

  1. 【YII】Yii入门

    1. 入门博客 http://blog.csdn.net/zm2714/article/category/1359776/2 2. 创建运行demo http://blog.csdn.net/zhou ...

  2. Yii入门,登录

    验证和授权在页面需要限制访问时用到.验证就是确认某人就是他所声称的那个人.通常涉及到用户名和密码,但也包含其他方式,例如智能卡,指纹等.授权是在验证用户后,查明他是否被允许管理指定的资源.通常判断他是 ...

  3. Yii入门教程

    1准备Yii源码 首先新建helloyii目录作为Web应用的根目录,并添加到Nginx的配置文件中.然后将Yii框架源码部署到helloyii下,目录结构如下: helloyii/ |-- fram ...

  4. Yii 入门

    跳转到不同module Redirect to module after login Yii $this->redirect( array('/tradesman/default/index') ...

  5. php大力力 [055节] 大力力阅读文章集锦

    php大力力 [055节] 效率低啊,效率低 啥也不说了,先把网页挨个保存一下,关闭网页窗口 从 2015-09-11 10:58 到 2015-09-11 12:38 共用了100分钟,整理最近几天 ...

  6. yii2

    yii2框架官方说明文档 http://www.yiiframework.com/doc/guide/2.0/zh_cn/caching.page yii2创建您的第一个application应用 h ...

  7. 使用Yii框架完整搭建网站流程入门

    下载地址: http://www.yiiframework.com/ http://www.yiichina.com/ 由美籍华人薛强研究而出, Yii 这个名字(读作易(Yee))代表 简单(eas ...

  8. Yii 框架学习--01 框架入门

    Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...

  9. yii快速入门与参考

    Yii 权威指南 http://www.yiichina.com/guide/ http://www.yiiframework.com/doc/guide/1.1/zh_cn/ Ⅰ.基本概念一.入口文 ...

随机推荐

  1. iOS 获取沙盒路径方法

    //获取家目录路径的函数: NSString *homeDir = NSHomeDirectory(); //获取Documents目录路径的方法: NSArray *paths = NSSearch ...

  2. 【Java EE 学习 25 上】【网上图书商城项目实战】

    一.概述 1.使用的jdk版本:1.6 2.java EE版本:1.6 3.指导老师:传智播客 王建 二.小项目已经实现的功能 普通用户: 1.登陆 2.注册 3.购物 4.浏览 管理员用户(全部管理 ...

  3. Power BI for Office 365(一)移动端应用

    此篇来自于微软商业智能网站的官方博客团队发布的Power BI在线资料其中的一部分,完整版地址: http://office.microsoft.com/en-us/office365-sharepo ...

  4. UVALive5031 Graph and Queries(Treap)

    反向操作,先求出最终状态,再反向操作. 然后就是Treap 的合并,求第K大值. #include<cstdio> #include<iostream> #include< ...

  5. 使用DotNetBar制作漂亮的WinFrom界面,自定义AgileEAS.NET SOA平台WinClient主界面

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  6. POJ 2774 Long Long Message 后缀数组

    Long Long Message   Description The little cat is majoring in physics in the capital of Byterland. A ...

  7. pyhon 模块与库

    引用“http://www.iplaypython.com/module/” 引用“http://codingnow.cn/language/265.html” Python模块是什么? 玩蛇网:一个 ...

  8. 数据类型和Json格式

    1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml. 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开. 它说,从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一 ...

  9. CF 337D 求圆交

    题目链接:http://codeforces.com/problemset/problem/337/D 题意:就是一棵树上,有一些点被来自东方的神秘力量影响的,力量影响范围是d,为可能的力量源有几个. ...

  10. Leetcode Substring with Concatenation of All Words

    You are given a string, S, and a list of words, L, that are all of the same length. Find all startin ...