• 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');
      

        


       

       

     







        

  • 相关阅读:
    Container(容器)
    version ctrl
    url和uri的区别
    Injector
    build tool
    变量
    python中break和continue的区别
    同步代码块以及同步方法之间的区别以及联系
    写在前面
    WebService入门
  • 原文地址:https://www.cnblogs.com/yolo-bean/p/7824992.html
Copyright © 2020-2023  润新知