ThinkPHP--控制器

控制器

常见控制器就不去赘述了。
比如,UserController.class.php类。它是对外公开可访问的。我们可以成为访问控制器。那么很多时候,由于项目业务的 高度繁杂,我们可能希望把很多业务分离到另外的层结构,比如事件控制器层,那可以:
第一步、在HOME目录下创建事件控制器目录:Event;
第二部、创建UserEvent.class.php类;

//是否继承控制器基类或者其他基类,取决于业务需求
class UserEvent extends Controller{
    public function test(){
        echo '当触发测试事件,执行这个方法,该方法是内部调用的';
    }
}

要访问这个方法也很简单

//访问方法
class UserController extends Controller{
    public function test(){
        $userEvent = new UserEvent(); //面向对象的访问方法
        $userEvent->test(); //访问事件该控制器的test操作
        echo 'test';
    }
}

PS:这里调用别的控制器还可以使用快捷调用方法A()。

$userEvent = A('User','Event'); //前面参数是控制器名,后面参数是事件层次。
$userEvent = A('Admin/User','Event'); //增加模块

参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析。
默认已经启用 了。所以不用额外配置。
默认的参数绑定是按变量名来绑定的,直接通过URL传递参数。

//变量名为$id
class UserController extends Controller{
    public function index($id){
        echo 'id:'.$id;
    }
}

URL:http://localhost/Home/User/index/id/5

PS:当URL没有传参(id/5)的时候回报错,当然可以为其设定一个默认值。

public function index($id=1)

跳转和重定向

TP在操作数据库时,需要跳转和重定向页面,ThinkPHP提供了一组方法解决该问题。

//成功和失败的跳转
class UserController extends Controller{
    public function index(){
    $flag = true;
    if($flag){
        //会跳转到http://localhost/Home/User/all
        $this->success('新增成功!','http://localhost/Home/User/all');
    }else{
    //会跳转到本页上一页
    $this->error('新增失败!');
    }
}
}

PS:success()方法和error()方法,第一个参数是提示信息、第二个跳转的地址、第三个是跳转时间。默认情况下success()方法是1秒,error()方法3秒。

//设置5秒
$this->success('新增成功!','http://localhost/Home/User/all',5);

success()方法和error()方法,跳转的时候就对应了相应的模板,默认如下:

//默认错误跳转对应的模板文件
'TMP_ACTION_ERROR'=>THINK_PATH.'Tpl/dispath_jump.tpl',
//默认成功跳转对应的模板文件
'TMP_ACTION_SUCCESS'=>THINK_PATH.'Tpl/dispath_jump.tpl',

自定义成功和错误提示模板页面

//这里的Public是指View视图下面的Public文件夹下的模板(html或tpl)页面
'TMP_ACTION_ERROR'=>'Public/success',
'TMP_ACTION_SUCCESS'=>Public/error,

对于自定义的模板,TP提供了一组变量可供使用。

变量含义
$msgTitle操作标题
$message页面提示信息
$status操作状态,1表示成功,0表示失败
$waitSecond跳转等待时间,单位为秒
$jumpUrl跳转页面地址

PS:如果对于数据库操作,采用了Ajax方式,那么success()error()会自动ajaxReturn()方法返回数据提供调用。

TP还单独提供了重定向方法redirect(),参数和U()方法一样,这个方法使用的是URL规则。

$this->redirect('User/test',array('id'=>5),5,'页面跳转中...');

如果只是想纯粹的URL跳转,不去使用URL规则,可以直接使用redirect()函数。

redirect('http://www.baidu.com',5,'页面跳转至...');

输入变量

我们在获取系统变量或者用户提交的数据时,这些变量数据错综复杂,一不小心就容易引起安全隐患,所以,TP提供了轻松和安全获取变量的解决方案。

//常规获取变量方式
$id = $_GET['id'];
$name = $_POST['name'];
$value = $_SESSION['var'];
$name = $_COOKIE['name'];
$file = $_SERVER['PHP_SELF'];

在TP中,我们不建议使用传统方式获取,因为没有统一的安全机制,后期调整也会比较麻烦,所以TP提供了I()方法进行变量的获取和过滤。
I()方法的格式:I(‘变量类型.变量’,[‘默认值’],[‘过滤方法’])

.
变量类型含义
get获取GET参数
post获取POST参数
param自动判断请求类型获取GET、POST或者PUT参数
request获取REQUEST参数
put获取PUT参数
session获取$_SESSION参数
cookie获取$_COOKIE参数
server获取$_SERVER参数
globals获取$GLOBALS参数
//GET方式获取ID
echo I('get.id');
//$_GET['id']没有值,则默认为1
echo I('get.id','1');
//过滤$_GET['id'],对它进行MD5加密(默认无值);
echo I('get.id','','md5');

PS:其他几个系统变量均采用以上方式。

默认情况下,I() 方法的过滤是:htmlspecialcbars,过滤掉html。

请求类型

TP提供了一组常量用来判断请求是否为GET、POST等,通过判断请求处理不同的业务逻辑。

常量含义
IS_GET判断是否GET提交请求
IS_POST判断是否POST提交请求
IS_PUT判断是否PUT提交请求
IS_DELETE判断是否DELETE提交请求
IS_AJAX判断是否AJAX提交请求

如:

//判断是否GET请求
if(IS_GET){
    echo'是GET请求';
}else{
    echo'不是GET请求';
}

空操作

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

//如果没有相关方法则执行
public function _empty($name){
    echo '找不到方法:'.$name;
}

空控制器

所谓空控制器,就是请求不到指定控制器时,调用一个专门的空控制器。

//如果没有相关控制器则执行(前提是先创建EmptyController.class.php)
class EmptyController extends Controller{
    public function index(){
        echo '找不到控制器:'.CONTROLLER_NAME.'控制器';
    }
}

操作绑定到类

TP提供了把每个操作方法定位到一个类的功能,即把每个层次分得更加细腻。

//设置操作绑定到类
'ACTION_BIND_CLASS'=>true,

然后在controller目录下建立User目录,在User目录建立index.class.php,再建立test.class.php。

//index.class.php
namespace Home\Controller\User;
use Think\Controller;

class index extends Controller{
    public function run(){
    echo 'User模块下的index类';
}
}
//test.class.php
namespace Home\Controller\User;
use Think\Controller;

class test extends Controller{
    public function run(){
    echo 'User模块下的test类';
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值