tp 5控制器

一、定义

只需要在模块下建立controller文件夹,在controller文件夹中定义一个PHP类文件即可,框架默认就自带了Index控制器。
在这里插入图片描述
在index模块下定义一个HelloWorld控制器,并在其中增加base()方法。
在这里插入图片描述

访问url
在这里插入图片描述

二、初始化

如果控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。

在这里插入图片描述
访问hello这个方法时:
在这里插入图片描述
访问data方法时:

在这里插入图片描述

三、前置操作

可以为某个或者某些操作指定前置执行的操作方法,设置 beforeActionList属性可以指定某个方法为其他方法的前置操作,数组键名为需要调用的前置方法名,无值的话为当前控制器下所有方法的前置方法。

[‘except’ => ‘方法名,方法名’] 表示这些方法不使用前置方法,
[‘only’ => ‘方法名,方法名’] 表示只有这些方法使用前置方法

class Index extends Controller
{
    protected $beforeActionList = [
        'first',
        'second' =>  ['except'=>'hello'],
        'three'  =>  ['only'=>'hello,data'],
    ];
    
    protected function first()
    {
        echo 'first<br/>';
    }
    
    protected function second()
    {
        echo 'second<br/>';
    }
    
    protected function three()
    {
        echo 'three<br/>';
    }

    public function hello()
    {
        return 'hello';
    }
    
    public function data()
    {
        return 'data';
    }
}

访问hello方法时 输出

 first
three
hello

四、空操作

空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。
在这里插入图片描述
由于City并没有定义beijing、shanghai或者shenzhen操作方法,因此系统会定位到空操作方法 _empty中去解析,_empty方法的参数就是当前URL里面的操作名,因此会看到输出的结果是:

在这里插入图片描述

五、空控制器

当发生这个情况时,就可以用空控制器来处理。
空控制器的概念是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),利用这个机制我们可以用来定制错误页面和进行URL的优化。
在这里插入图片描述
给项目定义一个新的类Error做控制器。
在这里插入图片描述
输入http://fastadmin.cn/index/tanjin/

由于系统并不存在tianjin控制器,因此会定位到空控制器(Error)去执行,会看到依次输出的结果是:
在这里插入图片描述
当找不到控制器的时候,就会定位到Error控制器类进行操作。

六、页面跳转和重定向

1.页面跳转

<?php
namespace app\index\controller;
 
use think\Controller;        //引用Controller类
 
class Login extends Controller
{
    //登录首页
    public function index(){
        return view();
    }
 
    //登录方法
    public function loginCheck(){
        //获取参数的封装方法
        $user = params('username');
        $pwd = params('password');
 
        //验证登录信息(代码略)
        ...
 
        if('结果'){
            //成功跳转
            //$this->success('信息提示','跳转地址','用户自定义数据','信息提示显示时长/秒','header信息');
            $this->success('登录成功');
        }else{
            //失败跳转
            //$this->success('信息提示','跳转地址','用户自定义数据','信息提示显示时长/秒','header信息');
            $this->error('用户名或密码错误');
        }
    }
}
  • success方法的默认跳转地址是$_SERVER[“HTTP_REFERER”],获取当前链接的上一个连接的来源地址;
  • error方法的默认跳转地址是javascript:history.back(-1);返回上一页。
    success和error方法都可以对应模板,模板可以用框架自带,也可自己设置:
  //默认模板
THINK_PATH . 'tpl/dispatch_jump.tpl';
 
//默认错误跳转对应的模板文件
'dispatch_error_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
//默认成功跳转对应的模板文件
'dispatch_success_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
 
**自定义模板:**
    //默认错误跳转对应的模板文件
'dispatch_error_tmpl' => 'public/error',
//默认成功跳转对应的模板文件
'dispatch_success_tmpl' => 'public/success',

2.重定向
\think\Controller类的redirect方法可以实现页面的重定向功能。

 //重定向到News模块的Category操作
$this->redirect('News/category');
 
//带参数的重定向
$this->redirect('News/category', ['cate_id' => 2]);
//重定向到指定的URL地址 并且使用302
$this->redirect('http://thinkphp.cn/blog/2',302);
 
//重定向的时候通过session闪存数据传值
$this->redirect('News/category', ['cate_id' => 2], 302, ['data' => 'hello']);
 
//记住当前的URL后跳转
redirect('News/category')->remember();
 
//需要跳转到上次记住的URL
redirect()->restore();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值