TP手册学习第二天

  1. 默认情况下,URL是不区分大小写的,访问规则:……模块/控制器/操作/参数/值,如果要访问驼峰法的控制器类BlogTest,则需要使用:blog_test

  2. MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型(M)、视图(V)、控制器(C),它们各自处理自己的任务。
  3. 我们可以简单的理解一个根命名空间对应了一个类库包。
    系统内置的几个根命名空间(类库包)如下:名称描述
    think 系统核心类库 thinkphp/library/think
    traits 系统Trait类库 thinkphp/library/traits
    app 应用类库 application





  4. 自动注册根命名空间:我们只需要把自己的类库包目录放入EXTEND_PATH目录(默认为extend,可配置),就可以自动注册对应的命名空间,例如:

    我们在extend目录下面新增一个my目录,然后定义一个myTest类( 类文件位于extend/my/Test.php)如下:

    namespace my;
    class Test 
    {
        public function sayHello()
        {
            echo 'hello';
        }
    }
    

    我们就可以在控制器直接实例化和调用

    $Test = new myTest();
    $Test->sayHello();
    

    如果我们在应用入口文件中重新定义了EXTEND_PATH常量的话,还可以改变myTest类文件的位置,例如:在public下的index.php定义

    define('EXTEND_PATH','../vendor/');
    

    然后在vendor目录下面新增一个my目录,然后定义一个myTest类( 类文件位于vendor/my/Test.php

     

  5. 手动注册根命名空间:

    在应用入口文件中添加下面的代码:测试时提示错误》》Fatal error: Class 'thinkLoader' not found in D:www estmypublicindex.php on line 18

    	hinkLoader::addNamespace('my','../application/extend/my/');
    

    如果要同时注册多个根命名空间,可以使用:

    	hinkLoader::addNamespace([
    'my' => '../application/extend/my/',
    'org' => '../application/extend/org/',
    ]);
    

    也可以直接在应用的配置文件中添加配置,系统会在应用执行的时候自动注册。测试未通过》》Class 'orgTest' not found

    'root_namespace' => [
    'my' => '../application/extend/my/',
    'org' => '../application/extend/org/',
    
  6. common模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承。

  7. 应用公共文件:common.php
  8. 绑定默认访问模块和控制器
    可以在应用公共文件common.php中绑定模块和控制器,如下: 
    // 绑定当前访问到index模块的index控制器
    define('BIND_MODULE','index/index');
    

     

  9. 一般入口文件以定义一些常量为主,支持的常量如下:
    路径常量

    DS 当前系统的目录分隔符
    THINK_PATH 框架系统目录 
    ROOT_PATH 框架应用根目录
    APP_PATH 应用目录(默认为application)
    CONF_PATH 配置目录(默认为APP_PATH)
    LIB_PATH 系统类库目录(默认为 THINK_PATH.'library/')
    CORE_PATH 系统核心类库目录 (默认为 LIB_PATH.'think/')
    TRAIT_PATH 系统trait目录(默认为 LIB_PATH.'traits/')
    EXTEND_PATH 扩展类库目录(默认为 ROOT_PATH . 'extend/')
    VENDOR_PATH 第三方类库目录(默认为 ROOT_PATH . 'vendor/')
    RUNTIME_PATH 应用运行时目录(默认为 ROOT_PATH.'runtime/')
    LOG_PATH 应用日志目录 (默认为 RUNTIME_PATH.'log/')
    CACHE_PATH 项目模板缓存目录(默认为 RUNTIME_PATH.'cache/')
    TEMP_PATH 应用缓存目录(默认为 RUNTIME_PATH.'temp/')
    

    系统常量

    IS_WIN 是否属于Windows 环境  
    IS_CLI 是否属于命令行模式  
    THINK_START_TIME 开始运行时间(时间戳)
    THINK_START_MEM 开始运行时候的内存占用
    ENV_PREFIX 环境变量配置前缀
    

      

      

  10.  空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化

    <?php
    namespace appindexcontroller;
    
    class City 
    {
        public function _empty($name)
        {
            //把所有城市的操作解析到city方法
            return $this->showCity($name);
        }
    
        //注意 showCity方法 本身是 protected 方法
        protected function showCity($name)
        {
            //和$name这个城市相关的处理
             return '当前城市' . $name;
        }
    }
    

      

  11. 空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),我们可以给项目定义一个Error控制器类

    <?php
    namespace appindexcontroller;
    use thinkRequest;

    class Error{
     function index(Request $request){   //$request是一个Request对象
      $conl_name=$request->controller();  ////获取URL中的控制器名称
      halt($conl_name.'不存在');
      echo "这是个空控制器";
     }

    }

     

  12. 控制器初始化方法_initialize,前提是你的控制器要继承 thinkController

  13. 如果继承了thinkController类的话,可以直接调用thinkViewthinkRequest类的方法

      // 获取包含域名的完整URL地址
            $domain=$this->request->url(true);
            halt($domain);
    

      

  14. 设置 beforeActionList属性可以指定某个方法为其他方法的前置操作

     protected $beforeActionList = [
            'first',     //执行所有方法之前都进行first操作
            'second' =>  ['except'=>'hello'],   //除了hello方法,执行其他方法之前都进行second操作
            'three'  =>  ['only'=>'hello,data'],  ////执行hello,data方法之前都进行three操作
        ];
    

      

  15. 重定向: hinkController类的redirect方法可以实现页面的重定向功能。

    //重定向到News模块的Category操作
    $this->redirect('News/category', ['cate_id' => 2]);
    
    //重定向到外部url
    $this->redirect('http://www.baidu.com');
    

      


     

     

 







    

原文地址:https://www.cnblogs.com/yolo-bean/p/7824992.html