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 }
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/sunzhenkun/p/7764805.html
Copyright © 2011-2022 走看看