目录 搜索
序言基础获取ThinkPHP环境要求目录结构入口文件自动生成模块控制器开发规范配置配置格式配置加载读取配置动态配置扩展配置批量配置架构模块化设计URL模式多层MVCCBD模式命名空间自动加载应用模式项目编译系统流程路由路由定义规则路由正则路由静态路由闭包支持实例说明控制器控制器定义前置和后置操作Action参数绑定伪静态URL大小写URL生成AJAX返回跳转和重定向输入变量请求类型空操作空控制器插件控制器操作绑定到类模型模型定义模型实例化字段定义连接数据库切换数据库分布式数据库支持连贯操作WHERETABLEALIASDATAFIELDORDERLIMITPAGEGROUPHAVINGJOINUNIONDISTINCTLOCKCACHECOMMENTRELATIONUSINGfetchSqlTOKENSTRICTINDEX命名范围CURD操作数据创建数据写入数据读取数据更新数据删除ActiveRecord字段映射查询语言查询方式表达式查询快捷查询区间查询组合查询统计查询SQL查询动态查询子查询自动验证自动完成参数绑定虚拟模型模型分层视图模型关联模型高级模型Mongo模型视图模板定义模板主题模板赋值模板渲染获取模板地址获取内容模板引擎模板变量输出系统变量使用函数默认值输出使用运算符标签库模板继承修改定界符三元运算包含文件内置标签Volist标签Foreach标签For标签Switch标签比较标签范围判断标签IF标签Present标签Empty标签Defined标签Assign标签Define标签标签嵌套import标签使用PHP代码原样输出模板注释模板布局模板替换调试调试模式异常处理日志记录页面TraceTrace方法变量调试性能调试错误调试模型调试缓存数据缓存快速缓存查询缓存静态缓存安全输入过滤表单合法性检测表单令牌防止SQL注入目录安全文件保护模板文件上传安全防止XSS攻击其他安全建议扩展类库扩展驱动扩展缓存驱动数据库驱动日志驱动Session驱动存储驱动模板引擎驱动标签库驱动行为扩展标签扩展Widget扩展应用模式部署PATH_INFO支持URL重写模块部署域名部署入口绑定替换入口专题SESSION支持Cookie支持多语言支持数据分页文件上传验证码图像处理RESTFulRPCSAEIP获取和定位附录常量参考配置参考升级指导鸣谢
文字

定义

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

'ACTION_BIND_CLASS'    =>    True,

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

Application/Home/Controller/IndexController.class.php

控制器类的定义如下:

namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller{
    public function index(){
        echo '执行Index控制器的index操作';
    }
}

可以看到,实际上我们调用的是 Home\Controller\IndexController 类的index方法。

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

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

控制器类的定义如下:

namespace Home\Controller\Index;
use Think\Controller;
class index extends Controller{
    public function run(){
        echo '执行Index控制器的index操作';
    }
}

现在,我们调用的其实是 Home\Controller\Index\index 类的run方法。

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

前置和后置操作

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

namespace Home\Controller\Index;
use Think\Controller;
class index extends Controller{
    public function _before_run(){
        echo 'before_'.ACTION_NAME;
    }

    public function run(){
        echo '执行Index控制器的index操作';
    }

    public function _after_run(){
        echo 'after_'.ACTION_NAME;
    }
}

空控制器

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

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

并且我们有定义:

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

控制器定义如下:

namespace Home\Controller\_empty;
use Think\Controller;
class index extends Controller{
    public function run(){
        echo '执行'CONTROLLER_NAME.'控制器的'.ACTION_NAME.'操作';
    }
}

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

执行Test控制器的index操作

空操作

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

namespace Home\Controller\Index;
use Think\Controller;
class _empty extends Controller{
    public function run(){
        echo '执行Index控制器的'.ACTION_NAME.'操作';
    }
}

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

执行Index控制器的test操作
上一篇: 下一篇:
  页面正在加载中