zoukankan      html  css  js  c++  java
  • ThinkPHP5.0框架开发--第2章 TP5.0架构

    ThinkPHP5.0框架开发--第2章 TP5.0架构

    第2章 TP5.0架构

    ==================================================

    上次复习

    1、如何安装TP

             1、源代码包安装

             2、Git安装

             3、Composer安装

    2、MVC模式

            

             M model 数据模型

                       # 数据库相关的处理

             V view 视图

                       # 页面

             C controller 控制器

                       # 控制器就是这个网站的逻辑和流程

    3、目录结构

    ==================================================

    今日学习

    1、TP架构的概述

            

             ThinkPHP 使用了MVC模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。

    2、URL解析

             http://   www.tp.com  /index.php    /Index   /Index    /index

             协议                   域名       入口文件      模块     控制器    方法

    3、入口文件

             1、文件地址

                       C:AppServwww p5publicindex.php

             2、作用:

                       负责整个TP的请求

    4、应用

            

             1、应用地址

                       C:AppServwww p5application

             2、作用:

                       一个应用代表一个网站

    5、模块(以前台为例)

             1、模块地址

                       C:AppServwww p5applicationindex

             2、作用:

                       网站所有的前台相关都与其有关

             3、新建后台模块

                       a、在应用目录下(C:AppServwww p5application)新建admin目录

                       b、在admin目录下新建model、view和controller

                       c、在Controller目中新建Index控制器(Index.php)

                       d、在Index.php 中书写代码

                                // 声明命名空间

                                namespace appadmincontroller;

                                // 声明控制器

                                class Index{

                                         public function index(){

                                                   return "我是后台的控制器";

                                         }

                                }

                       e、通过地址栏访问

                                http://www.tp.com/index.php/Admin/Index/index

    6、控制器

             1、控制器目录

                       C:AppServwww p5applicationindexcontroller

             2、作用:

                       书写业务逻辑

             3、新建控制器(以前台为例)

                       a、正前台控制器目录(C:AppServwww p5applicationindexcontroller) 下新建User.php

                       b、在控制器中能书写代码

                                <?php

                                // 声明命名空间

                                namespace appindexcontroller;

                                // 声明控制器

                                class User{

                                         // index 方法

                                         public function index(){

                                                   return "我是前台User控制器中的index方法";

                                         }

                                }

                       c、地址栏访问      

                                http://www.tp.com/index.php/Index/user/index

                       d、注意:

                                1、控制器的文件名必须首字母大写

                                2、控制中必须声明命名空间

                                3、控制器中类名必须和文件名一致

    7、操作(方法)

             1、操作地址

                       操作一般都在控制器的文件中

             2、新建一个操作(以前台index控制器为例)

                       1、打开前台index控制器(C:AppServwww p5applicationindexcontrollerIndex.php)

                       2、在控制器新建test方法

                                public function test(){

                                         return "我是用户自己创建的方法";

                                }

                       3、地址栏访问

                                http://www.tp.com/index.php/Index/Index/test

    8、模型(数据模型)

            

             1、数据模型地址

                       C:AppServwww p5applicationindexmodel

             2、作用:

                       负责数据库相关的处理

    9、视图(页面)

            

             1、视图地址

                       C:AppServwww p5applicationindexview

             2、作用:

                       其实就是网站页面

    10、命名空间

             与目录有关(以前台index控制器命名空间为例)

                      

             C:AppServwww p5applicationindexcontroller

             namespace appindexcontroller;

    11、跨控制器调用

            

             1、使用命名空间

                 $model=new appadmincontrollerIndex;

                 echo $model->index();

        2、使用use

                 use appadmincontrollerIndex as AdminIndex;

                 $model=new AdminIndex();

                 echo $model->index();

        3、系统方法

                 # 系统方法一般在(C:AppServwww p5 hinkphphelper.php)

                 $model=controller('admin/Index');

                 echo $model->index();

     

      1 <?php
      2 namespace appindexcontroller;
      3 
      4 // use appindexcontrollerUser;
      5 
      6 // use appadmincontrollerIndex as AdminIndex;
      7 class Index
      8 {
      9     public function index()
     10     {
     11         return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_bd568ce7058a1091"></thinkad>';
     12     }
     13 
     14     public function test(){
     15 
     16         return "我是用户自己创建的方法";
     17     }
     18 
     19     // 调用当前模块User控制器
     20 
     21     public function diaoyong(){
     22 
     23         // 调用当前模块User控制器
     24 
     25         $model=new appindexcontrollerUser;
     26 
     27         echo $model->index();
     28 
     29 
     30         echo "<hr>";
     31         // 使用use    
     32 
     33         $model=new User;
     34 
     35         echo $model->index();
     36 
     37         echo "<hr>";
     38 
     39         // 使用系统方法
     40 
     41         $model=controller('User');
     42 
     43         echo $model->index();
     44 
     45 
     46     }
     47 
     48     // 调用后台模块的
     49 
     50     public function diaoyongs(){
     51 
     52         // 使用命名空间
     53 
     54         $model=new appadmincontrollerIndex;
     55 
     56         echo $model->index();
     57 
     58         echo "<hr>";
     59 
     60         $model=new AdminIndex();
     61 
     62         echo $model->index();
     63 
     64         echo "<hr>";
     65 
     66         $model=controller('admin/Index');
     67 
     68         echo $model->index();
     69     }
     70 
     71     // 调用当前跨控制器中的方法
     72 
     73     public function fanfa(){
     74         // 调用当前控制器的test方法
     75 
     76         echo $this->test();
     77 
     78         echo "<hr>";
     79 
     80         echo self::test();
     81 
     82         echo "<hr>";
     83 
     84         echo Index::test();
     85 
     86         echo "<hr>";
     87 
     88         echo action('test');
     89 
     90     }
     91 
     92     // 调用其他控制器中的方法
     93 
     94     public function fanfas(){
     95         $model=new appindexcontrollerUser;
     96 
     97         echo $model->index();
     98 
     99         echo "<hr>";
    100 
    101         echo action('User/index');
    102     }
    103 
    104     // 调用后台模块的index方法
    105 
    106     public function fanfass(){
    107 
    108         $model=new appadmincontrollerIndex;
    109 
    110 
    111         echo $model->index();
    112 
    113         echo "<hr>";
    114 
    115         echo action('admin/Index/index');
    116     }
    117 
    118 }

     说明:

    系统方法controller可以得到控制器,可以用得到的控制器去得到方法,也可以直接用action方法可以得到方法

    系统方法里面的斜杠是顺的,命名空间里面的斜杠是反的,系统方法里面的斜杠写错了是得不到结果的。 

    12、调用方法

             1、调用当前控制器的test方法

                       1、使用面向对象的技术

                                echo $this->test();

                                echo self::test();

                                echo Index::test();

                       2、使用系统方法

                                echo action('test');

             2、调用User控制器下的index方法

                       1、命名空间

                                $model=new appindexcontrollerUser;

                                echo $model->index();

                       2、使用系统方法

                                echo action('User/index');

             3、调用后台模块下Index控制器index方法

                       1、命名空间

                                $model=new appadmincontrollerIndex;

                                echo $model->index();

                       2、使用系统方法

                                echo action('admin/Index/index');

    13、主要分析TP执行流程

             1、入口文件(C:AppServwww p5publicindex.php)

                       作用:

                                1)定义目录常量

                                2)加载框架引导目录

             2、加载框架的引导文件(C:AppServwww p5 hinkphpstart.php)

                       作用:

                                1) 引导基础文件

                                2) 对应用进行运转

             3、加载框架的基础引导文件(C:AppServwww p5 hinkphpase.php);

                       作用:

                                1) 加载系统常量

                                2) 引入loader类 (C:AppServwww p5 hinkphplibrary hinkloader.php)

                                3) 引入环境变量

                                4) 注册自动记载机制

                                5) 注册异常处理机制(C:AppServwww p5 hinkphplibrary hinkError.php)

                                6) 记载惯例配置(C:AppServwww p5 hinkphpconvention.php)

     

     1 <?php
     2 // +----------------------------------------------------------------------
     3 // | ThinkPHP [ WE CAN DO IT JUST THINK ]
     4 // +----------------------------------------------------------------------
     5 // | Copyright (c) 2006~2017 http://thinkphp.cn All rights reserved.
     6 // +----------------------------------------------------------------------
     7 // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
     8 // +----------------------------------------------------------------------
     9 // | Author: liu21st <liu21st@gmail.com>
    10 // +----------------------------------------------------------------------
    11 
    12 define('THINK_VERSION', '5.0.10');
    13 define('THINK_START_TIME', microtime(true));
    14 define('THINK_START_MEM', memory_get_usage());
    15 define('EXT', '.php');
    16 define('DS', DIRECTORY_SEPARATOR);
    17 defined('THINK_PATH') or define('THINK_PATH', __DIR__ . DS);
    18 define('LIB_PATH', THINK_PATH . 'library' . DS);
    19 define('CORE_PATH', LIB_PATH . 'think' . DS);
    20 define('TRAIT_PATH', LIB_PATH . 'traits' . DS);
    21 defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS);
    22 defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS);
    23 defined('EXTEND_PATH') or define('EXTEND_PATH', ROOT_PATH . 'extend' . DS);
    24 defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' . DS);
    25 defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS);
    26 defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS);
    27 defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS);
    28 defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS);
    29 defined('CONF_PATH') or define('CONF_PATH', APP_PATH); // 配置文件目录
    30 defined('CONF_EXT') or define('CONF_EXT', EXT); // 配置文件后缀
    31 defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀
    32 
    33 // 环境常量
    34 define('IS_CLI', PHP_SAPI == 'cli' ? true : false);
    35 define('IS_WIN', strpos(PHP_OS, 'WIN') !== false);
    36 
    37 
    38 // 载入Loader类
    39 require CORE_PATH . 'Loader.php';
    40 
    41 // 加载环境变量配置文件
    42 if (is_file(ROOT_PATH . '.env')) {
    43     $env = parse_ini_file(ROOT_PATH . '.env', true);
    44     foreach ($env as $key => $val) {
    45         $name = ENV_PREFIX . strtoupper($key);
    46         if (is_array($val)) {
    47             foreach ($val as $k => $v) {
    48                 $item = $name . '_' . strtoupper($k);
    49                 putenv("$item=$v");
    50             }
    51         } else {
    52             putenv("$name=$val");
    53         }
    54     }
    55 }
    56 
    57 // 注册自动加载
    58 	hinkLoader::register();
    59 
    60 // 注册错误和异常处理机制
    61 	hinkError::register();
    62 
    63 // 加载惯例配置文件
    64 
    65 	hinkConfig::set(include THINK_PATH . 'convention' . EXT);

             4、运行应用(C:AppServwww p5 hinkphplibrary hinkApp.php) 下的run方法;

                      

                       1、第一步: 加载当前控制器中 initCommon() 方法

                       2、第二步: 加载当前控制器中 init() 方法

                                1、加载各种配置文件

                                2、加载公共文件

                                3、加载语言包

                       3、第三步: 设置时区

                       4、第四步: 加载当前控制器 routeCheck() 方法 路由检测

                       5、第五步: 调用控制器中exec方法

                                根据用户请求进行分发处理

                       6、第六步: 根据不同请求类型记载对应文件 module方法

                                加载到对应的控制器和对应方法

     

             5、响应输出

                       用户看到的所有界面就加载出来了

  • 相关阅读:
    ASCII码对照表
    createPopup 超链接
    说说回车键触发表单提交的问题
    linux下配java环境的小结
    spring bind checkbox 传递值问题
    用Common validator为springMVC做验证时遇到的一个问题小记
    [转载]对android LinearLayout中layout_weight属性使用初探
    linux下tomcat启动正常,但用http://22.22.33.33:8080却访问不了,防火墙的设置问题
    Java 遍历Map时 删除元素
    ftp用户登录时不能进自己的目录,被拒绝登录的解决方法
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8591866.html
Copyright © 2011-2022 走看看