zoukankan      html  css  js  c++  java
  • thinkphp 操作绑定到类

    定义

    ThinkPHP3.2版本提供了把每个操作方法定位到一个类的功能,可以让你的开发工作更细化,可以设置参数ACTION_BIND_CLASS,例如:

    1. 'ACTION_BIND_CLASS' => True,

    设置后,我们的控制器定义有所改变,以URL访问为 http://serverName/Home/Index/index为例,原来的控制器文件定义位置为:

    1. Application/Home/Controller/IndexController.class.php

    控制器类的定义如下:

    1. namespace HomeController;
    2. use ThinkController;
    3. class IndexController extends Controller{
    4. public function index(){
    5. echo '执行Index控制器的index操作';
    6. }
    7. }

    可以看到,实际上我们调用的是 HomeControllerIndexController 类的index方法。

    设置后,控制器文件位置改为:

    1. Application/Home/Controller/Index/index.class.php

    控制器类的定义如下:

    1. namespace HomeControllerIndex;
    2. use ThinkController;
    3. class index extends Controller{
    4. public function run(){
    5. echo '执行Index控制器的index操作';
    6. }
    7. }

    现在,我们调用的其实是 HomeControllerIndexindex 类的run方法。

    run方法依旧可以支持传入参数和进行Action参数绑定操作,但不再支持A方法实例化和R方法远程调用,我们建议R方法不要进行当前访问控制器的远程调用。

    前置和后置操作

    当设置操作方法绑定到类后,前置和后置操作的定义有所改变,只需要在类里面定义_before_run_after_run方法即可,例如:

    1. namespace HomeControllerIndex;
    2. use ThinkController;
    3. class index extends Controller{
    4. public function _before_run(){
    5. echo 'before_'.ACTION_NAME;
    6. }
    7. public function run(){
    8. echo '执行Index控制器的index操作';
    9. }
    10. public function _after_run(){
    11. echo 'after_'.ACTION_NAME;
    12. }
    13. }

    空控制器

    操作方法绑定到类后,一样可以支持空控制器,我们可以创建 Application/Home/Controller/_empty目录,即表示如果找不到当前的控制器的话,会到_empty控制器目录下面定位操作方法。

    例如,我们访问了URL地址 http://serverName/Home/Test/index,但并不存在 Application/Home/Controller/Test目录,但是有定义 Application/Home/Controller/_empty目录。

    并且我们有定义:

    1. Application/Home/Controller/_empty/index.class.php

    控制器定义如下:

    1. namespace HomeController\_empty;
    2. use ThinkController;
    3. class index extends Controller{
    4. public function run(){
    5. echo '执行'CONTROLLER_NAME.'控制器的'.ACTION_NAME.'操作';
    6. }
    7. }

    访问http://serverName/Home/Test/index后 输出结果显示:

    1. 执行Test控制器的index操作

    大理石平台检验标准

    空操作

    操作绑定到类后,我们依然可以实现空操作方法,我们只要定义一个 HomeControllerIndex\_empty类,就可以支持Index控制器的空操作访问,例如: 控制器定义如下:

    1. namespace HomeControllerIndex;
    2. use ThinkController;
    3. class _empty extends Controller{
    4. public function run(){
    5. echo '执行Index控制器的'.ACTION_NAME.'操作';
    6. }
    7. }

    当我们访问http://serverName/Home/Index/test后 输出结果显示:

    1. 执行Index控制器的test操作
     
  • 相关阅读:
    [PHP] websocket协议的生成
    [Linux] 解决virtualbox共享文件夹没有访问权限的问题
    [Linux] VirtualBox的ubuntu系统与宿主机共享目录
    [PHP] 框架中.env文件的加载过程
    [PHP] PHP7已经删除了preg_replace的e修饰符
    [日常]解决Connection to `ssl://pecl.php.net:443' failed
    [日常]k8s的前世今生
    [Linux] 利用tcpdump和strace进行debug
    [Go] 使用读写锁对map资源进行安全处理
    [Linux] 使用awk比较两个文件的内容
  • 原文地址:https://www.cnblogs.com/furuihua/p/11782894.html
Copyright © 2011-2022 走看看