zoukankan      html  css  js  c++  java
  • ThinkPHP—URL的访问以及各种方法的操作

    1.URL访问

    ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块、控制器和操作,下面是一个标准的URL访问格式:

    第一种访问方式
    http://localhost:8080/thinkphp/index.php/Home/Index/index  入口文件/模块/控制器/操作
    第二种访问方式(传参数)
    http://localhost:8080/thinkphp/index.php?m=Home&c=Index&a=index  传三个参数

    而且访问时不需要区分大小写,无论URL是否开启大小写转换,模块名都会强制小写。

    2.命名空间

    相当于一个虚拟的路径
    自动加载类

    初始命名空间:thinkPHP/Library 虚拟的
    根命名空间:由两部分组成:
        1.Library下面的所有文件夹都是根命名空间
        2.程序目录下模块文件夹
        
    使用某一个类:
    use 该类的根命名空间/.../类名

    use ThinkController;

    定义命名空间:
    namespace 该类的根命名空间/.../它所在的文件夹为止

    namespace HomeController;

    3.空操作和和空控制器处理

    空操作:就没有指定的操作方法

    “空操作”本质意思:一个对象(控制器)调用本身不存在的方法

    空操作有两种解决方案:

    ①     在对应的控制器里边制作一个方法,名称为”_empty”,这个控制器的空操作都会自动执行该方法。(推荐使用)

     //访问方法不存在时调用
         public function _empty(){
             echo "空操作";
         }

    ②     给空操作的名称制作一个同名的模板出来,系统会自动调用

    空控制器:没有指定控制器

    空控制器:在实例化控制器对象的时候,没有找到指定的类

    空控制器处理方案:可以再制作一个控制器,名称EmptyController.class.php

    在该控制器内部其实只需要制作一个_empty()方法即可。

    1 <?php
    2 namespace HomeController;
    3 use thinkController;
    4 class EmptyController extends Controller{
    5     public function _empty(){
    6         echo "控制器不存在";
    7     }    
    8 }

     4.系统常量信息

    //获取系统常量信息方法
    public function test(){ var_dump(get_defined_constants(true)); }
    如果加参数true,会分组显示,如下图:

    //常用的常量信息(获取不同路径)
    
    __ROOT__ 获取TP的根路径(/thinkphp)
    
    __SELF__ 当前浏览器地址栏中的地址(/thinkphp/index.php/Home/Index/test)
    
    __APP__ 入口文件的路径(/thinkphp/index.php)
    
    __MODULE__ 当前程序模块的路径(/thinkphp/index.php/Home)
    
    __CONTROLLER__ 当前控制器的路径(/thinkphp/index.php/Home/Index)
    
    __ACTION__ 当前操作方法的路径(/thinkphp/index.php/Home/Index/test)

    5.跨控制器调用

    一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法。

    跨控制器调用可以节省我们代码的工作量

     1 <?php
     2 namespace HomeController;
     3 //继承父类
     4 use ThinkController;
     5 class IndexController extends Controller {
     6     public function index(){
     7        echo "哈哈哈";
     8     }
     9      public function test(){
    10         //控制器间的调用
    11         $this->index();
    12      //调用标记
    13      $this->mark("hello world");
    14  }    
    15  //加标记
    16      public function mark($s){
    17          return "<mark>{$s}</mark>";
    18      }
    19 }

    另外创建一个操作类进行跨控制器调用

     1 <?php
     2 namespace HomeController;
     3 use ThinkController;
     4 class LoginController extends Controller {
     5     public function diaoyong(){
     6       //跨控制器调用 造对象
     7       //$index = new HomeControllerIndexController();
     8       
     9       //造控制器对象(TP中自带的快捷函数)
    10       //$index = A("index");
    11       
    12       //调用方法
    13       //$index->mark("你好");
    14       
    15       //造完对象后直接调用(TP中自带的快捷函数)
    16       //R("index/biaoji");
    17     }
    18 }
  • 相关阅读:
    【Thymeleaf】遇到Current request is not a multipart request不要慌,检查页面中form的属性enctype="multipart/formdata"是否正确就对了
    [CSS]让ul中的li在所属div内成一行居中显示。
    【JS】将yyyyMMdd hh:mm:ss的字符串时间转换为JS时间
    分页资料收集
    【oralce/springboot/jquery】自行实现分页
    【JS】一小时之内显示红饼图标,两小时之内选择黄星图标,否则显示时间
    【JavaScript】给动态生成的链接动态的绑定事件
    VBA在Excel中的应用(四)
    在MOSS 2007中自定义DataView Webpart的数据显示样式
    ASP.NET中的缩略图应用
  • 原文地址:https://www.cnblogs.com/sunzhenkun/p/7764805.html
Copyright © 2011-2022 走看看