• Thinkphp 空操作、空控制器、命名空间


    1、空操作

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

    http://网址/index.php/Home/Main/login

    http://网址/index.php/Home/Main/hello  空操作

    出现页面:

    显示的错误信息过于详细,为安全以及优化页面起见,实行空操作

    1、做一个_empty()方法。要在子类里面写,不要再父类里(推荐使用)

    function _empty()
    {
      echo "网页不存在,请检查浏览器地址信息!";
    }

    2.造一个该方法对应的模版
    在view/main下面新建一个text.html文件

    <body>
    <h1>别乱访问</h1>
    </body>
    </html>

    注意:空操作方法仅在你的控制器类继承系统的ThinkController类才有效,否则需要自己定义 __call 来实现。

    2.空控制器

    空控制器的概念是指当系统找不到请求的控制器名称的时候,系统会尝试定位空控制器(EmptyController),利用这个机制我们可以用来定制错误页面和进行URL的优化。

    Home/Controller/EmptyController.class.php

    <?php
    namespace HomeController;
    use ThinkController;
    class EmptyController extends Controller
    {
        public function _empty()
        {
            echo "访问的页面不存在!";
            }
        
    }

    3、跨控制器调用

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

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

    3.1 同一模块下:

    例如:在Home/Controller中有两个控制器:IndexController.class.php和MainController.class.php

    在IndexController.class.php有一个方法:

    public function ShuChu()
        {
            return "教务管理系统!";    
        }

    现在想要在 MainController.class.php中也调用ShuChu()方法

     function DiaoYong()
         {
            //方法一:造对象
            //$index=new IndexController(); 
            //echo $index->ShuChu();
            
            //造对象有快捷函数供我们使用:
            //A(“[模块/]控制器标志”) 实例化控制器对象
            //方法二:使用A()方法
            //$index=A("Index");
            //echo $index->ShuChu();
            
            //R([模块/]控制器标志/操作方法)  实例化对象同时调用指定方法
            //方法三:使用R()方法,造对象并且调用某个特定的方法
            echo R("Index/ShuChu");
      }

    运行结果:

    3.2 不同模块下:

    新添加一个模块Admin

    TextController.class.php:

    <?php
    namespace AdminController;
    use ThinkController;
    class TextController extends Controller
    {    
        public function Text()
        {
            echo "HHHHH";
        }
    }

    现在想要在Home/Controller/ MainController.class.php中也调用Text()方法

    function Text()
        {
            //跨模块调用
                    
            //方法一:使用A()方法
            //$tt=A("Admin/Text");
            //echo $tt->Text();
            
            //方法二:使用R()方法,造对象并且调用某个特定的方法
            echo R("Admin/Text/Text");
            
            }

    运行结果:

    4.命名空间namespace

    相当于一个虚拟的目录


    正常管理文件使用文件夹--物理区分


    TP框架的初始命名空间是:ThinkPHPLibrary

    在TP框架下命名空间里面使用代表的是初始命名空间(ThinkPHPLibrary)

    1.系统目录下根命名空间是ThinkPHPLibrary下面的文件夹名称命名的

    2.模块的根命名空间是以模块名命名的

    在定义命名空间的时候需要从根写起例如:HomeController 例如:ThinkModel


    如果要使用某个类文件,引入该类命名空间的时候:
    使用use关键字,后面写该类的命名空间 后面加上 "文件名"

    如果不想引入命名空间:在造类的对象的时候可以使用(初始命名空间)来找到对应的类
    例如:new ThinkPage(30);

  • 相关阅读:
    我的第一个Python爬虫——谈心得
    python写第一个网页
    科学计算和可视化
    类和正则表达(自动更正,和代数运算)
    图片处理
    jieba
    汉诺塔问题
    Python核心编程(第二版)第十章习题答案
    python官方文档之open()函数的翻译
    python打开文件时提示“File was loaded in the wrong encoding:’UTF-8”根因调查
  • 原文地址:https://www.cnblogs.com/ds-3579/p/5584614.html
Copyright © 2020-2023  润新知