• 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. ASP.NET 保存txt文件

    public void ProcessRequest(HttpContext context) { context.Response.Clear(); context.Response.Buffer ...

  2. ionic扩展插件

    1.ionic-timepicker 时间选择 https://github.com/rajeshwarpatlolla/ionic-timepicker   2.ionic-datepicker 日 ...

  3. NSLOOKUP命令使用

    nslooup命令,可以用来检测dns服务器是否可用,以及域名对应的真实ip,在一些网络dns不稳定的情况下可以使用,用来正确访问网站. Microsoft Windows [版本 6.1.7601] ...

  4. jasig CAS 实现单点登录 - java、php客户端登录实现

    jasig CAS项目本身就是一个完整的CAS单点登录服务 1.服务端需要把  认证处理类.用户属性返回值处理类 调整成我们自己处理类即可实现单点登录 2.java客户端需要引入cas-client- ...

  5. hive 表分区操作

    hive的数据查询一般会扫描整个表,当表数据太大时,就会消耗些时间,有时候我们只需要对部分数据感兴趣,所以hive引入了分区的概念    hive的表分区区别于一般的分布式分区(hash分区,范围分区 ...

  6. ibatis.net MVC 单元测试 错误解决方法

    Q1:Unable to load file via resource "SqlMap.config" as resource.Cause : 未能找到文件:"...Te ...

  7. linux yum安装jdk

    >>>>>>>>>> 实例: yum安装jdk 1.查看当前的jdk版本,并卸载 (注1:rpm -qa ###解释:查询所有安装的rpm包 ...

  8. BACKLOG

    团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  9. PDO连接数据库

    PDO连接数据库 PDO简介和配置 php.ini extension=php_pdo.dll extension=php_pdo_myysql.dll PDO连接MYSQL new PDO(&quo ...

  10. CentOS6.7安装RabbitMQ3.6.5

    1.安装所有依赖包yum install -y gcc ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-t ...