// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/'); // 定义配置文件目录和应用目录同级
define('CONF_PATH', __DIR__.'/../config/'); // 修改应用类库命名空间(默认是app) 5.08+版本
define('APP_NAMESPACE','app');

定义:

//application\index\controller\Index.php
namespace app\index\controller;
class Index
{
public function index()
{
return 'index';
}
}
//或者
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return 'index';
}
}

//application\index\controller\v1\Index.php多级控制器
//controller/aa/bb/User.php 那么遇到url、链接、路由地址等表示控制器的都可以.来链接
//如:url('index/aa.bb.user/add')、https://www.xxx.com/index.php/index/aa.bb.user/add.html、Route:rule('adduser/:id','index/aa.bb.user/add');
namespace app\index\controller\v1;
class Index
{
public function index()
{
//模板渲染
$view = new View();//必须申明use think\View;
return $view->fetch('index');
//或者
return view('index'); }
}
//或者
namespace app\index\controller\v1;
use think\Controller;
class Index extends Controller
{
public function index()
{
// 获取包含域名的完整URL地址
$this->assign('domain',$this->request->url(true)); //继承Controller的话可以直接调用下面这个
return $this->fetch('index');
}
}

配置文件配置这想可以改变默认输出的数据格式(api接口可用到)

// 默认输出类型
'default_return_type' => 'json',

控制器初始化方法:

namespace app\index\controller;
use think\Controller;
class Index extends Controller
{ public function _initialize()
{
echo 'init';
} public function index()
{
return 'index';
}
}

前置操作:

class Index extends Controller
{ //前置
protected $beforeActionList = [
'first',//无子数组 调用当前类的方法时都要调用它
'second' => ['except'=>'hello'],//except 表示hello不使用second前置方法
'three' => ['only'=>'hello,data'],//only 表示只有hello,data方法才使用three这个前置方法
]; public function index()
{
return $this->fetch('test@index/index');
} public function first()
{
echo 'first<br/>';
}
public function second()
{
echo 'second<br/>';
}
public function three()
{
echo 'three<br/>';
} public function hello()
{
return 'hello';
} public function data()
{
return 'data';
} }
$this->success('新增成功', 'User/list');//默认的返回页面是$_SERVER['HTTP_REFERER']
$this->error('新增失败');////错误页面的默认跳转页面是返回前一页,通常不需要设置
跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"],error方法的默认跳转地址是javascript:history.back(-1);。 success和error方法都可以对应的模板,默认的设置是两个方法对应的模板都是:THINK_PATH . 'tpl/dispatch_jump.tpl'
即:thinkphp\tpl\dispatch_jump.tpl

改变默认模板:

方法1、在application/tpl文件夹下新建dispatch_jump.tpl和dispatch_jump.tpl;然后配置文件配置:

//默认错误跳转对应的模板文件
'dispatch_error_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
//默认成功跳转对应的模板文件
'dispatch_success_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',

方法2、使用项目内部的模板文件

在view/public/下新建success.html和error.html 然后在配置文件配置

//默认错误跳转对应的模板文件
'dispatch_error_tmpl' => 'public/error',
//默认成功跳转对应的模板文件
'dispatch_success_tmpl' => 'public/success',

redirect方法的参数用法和Url::build

使用redirect助手函数还可以实现更多的功能,例如可以记住当前的URL后跳转

redirect('News/category')->remember();

需要跳转到上次记住的URL的时候使用:

redirect()->restore();

空控制器和空操作阻止控制器和方法不存在时的报错:

1、在模块控制器下定义空控制器类;当控制器不存在时会找到这个空控制器的index方法

<?php
namespace app\test\controller; use think\Request; class Error
{
public function index(Request $request)
{ $nowController = $request->controller();
echo $nowController;
}
//空控制器加上空操作是应对控制器和方法都不存在时的情况
public function _empty($name){
echo '操作'.$name . '不存在';
} }

2、将空操作方法定义在每个控制器中或者定义在基类中,然后个控制器继承该基类

public function _empty($name)
{
return '找不到当前的方法';
}

分层控制器:与controller平级的控制器层 

tp默认自带application/controller;分层可以多出和controller一样的控制器层,那么我们可以将controller当做访问控制器层,其他的当做不能够被URL访问直接调用到的,只能在访问控制器、模型类的内部,或者视图模板文件中进行调用的分层控制器;如官网给的例子 application/event控制器层在这个控制器下定义一个Blog类文件

amespace app\index\event;

class Blog
{
public function insert()
{
return 'insert';
} public function update($id)
{
return 'update:'.$id;
} public function delete($id)
{
return 'delete:'.$id;
}
}

调用这个event控制层的Blog类:

$event = \think\Loader::controller('Blog', 'event');
echo $event->update(5); // 输出 update:5
echo $event->delete(5); // 输出 delete:5
//或者:
$event = controller('Blog', 'event');
echo $event->update(5); // 输出 update:5
echo $event->delete(5); // 输出 delete:5 //还支持跨模块调用: 其实use命名空间也可以的
$event = controller('Admin/Blog', 'event');
echo $event->update(5); // 输出 update:5

资源控制器在路由有提到:

自动定位控制器

在访问控制器层controller下有子目录那么我们可以在配置文件配置如下:

'controller_auto_search' => true,

然后定义控制器如下:

amespace app\index\controller\v1;

use think\Controller;

class Blog extends Controller
{
public function index()
{
return $this->fetch();
} }

访问url:http://serverName/index.php/index/v1/Blog/index.html

												

thinkphp5控制器的更多相关文章

  1. thinkphp5控制器访问转换问题

    假设定义了HelloWorld控制器 url访问地址就是:http://localhost/index.php/index/hello_world,与此同时view目录下的模板文件夹要命名为hello ...

  2. ThinkPHP5 控制器中怎么实现 where id = 2 or id = 3 这个查询语句?

    使用 whereOr whereIn();  (来自 ★C̶r̶a̶y̶o̶n-杭州 ) 为什么不用数组啊,array('eq', array(1,2),'or') (来自 supler)

  3. thinkphp5控制器向+vue的data里传值

    传一维数组传值 $array=['id'=>40,"cat_name"=>"明星产品"]; $MenuCats_info=json_encode($ ...

  4. redis+thinkphp5的注册、登陆、关注基础例子

    最近初步接触redis,结合thinkphp5与redis,写了一个用户注册的基础例子,用于学习. 这个例子是结合了兄弟连的redis视频,最后两节的内容写的:https://study.163.co ...

  5. Thinkphp5.0 在自己定义一个公共方法的控制器并且继承了Controller类的时候报错

    在建立网站的时候,你通常想着把一些共有的方法提取出来,放入一个控制器内,如果你是将业务逻辑写入了构造函数里面,那么就得注意了. 在thinkphp5.0当中,有一个初始化的方法,类似于构造函数,那就是 ...

  6. Thinkphp5.0 控制器向视图view赋值

    Thinkphp5.0 控制器向视图view的赋值 方式一(使用fetch()方法的第二个参数赋值): <?php namespace app\index\controller; use thi ...

  7. ThinkPHP5.0框架开发--第5章 TP5.0 控制器

    ThinkPHP5.0框架开发--第5章 TP5.0 控制器 第5章 TP5.0 控制器 ============================================== 上次复习 1.路 ...

  8. thinkphp5空控制器和空操作

    thinkphp5空控制器和空操作 一.总结 1.空控制器和空操作用:空控制器和空操作都是为了防止网站上的用户恶意输入,网站上线的话必须加上, 2.空操作:空操作就是在一般的控制器里面加上一个 _em ...

  9. thinkphp5多级控制器是什么?怎么使用?

    thinkphp5多级控制器是什么?怎么使用? 一.总结 1.多级控制器是让控制器的级数变成多级,也就是controller目录下可以新建其它目录. 2.使用的话注意目录下的控制的的命名空间(加上目录 ...

随机推荐

  1. Go语言中的byte和rune区别、对比

    Go语言中byte和rune实质上就是uint8和int32类型.byte用来强调数据是raw data,而不是数字:而rune用来表示Unicode的code point.参考规范: uint8 t ...

  2. MySql两种存储引擎的区别

    MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良.虽然性能极佳,但却有一个缺点 ...

  3. Hbase理论&&hbase shell&&python操作hbase&&python通过mapreduce操作hbase

    一.Hbase搭建: 二.理论知识介绍: 1Hbase介绍: Hbase是分布式.面向列的开源数据库(其实准确的说是面向列族).HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hb ...

  4. windows Sever 2012下Oracle 12c安装配置方法图文教程

    windows Sever 2012下Oracle 12c安装配置方法图文教程 Oracle 12c安装配置方法图文教程,具体内容如下 1.我们开启虚拟机 2.Windows Sever 2012启动 ...

  5. 整合 JIRA 和 Confluence 6

    Jira 应用和 Confluence 可以完全的整合在一起.在 Confluence 中收集你项目组成员的想法,知识和计划.在 Jira 中跟踪你的系统出现的问题,让这 2 个应用同时工作. 了解更 ...

  6. Vue+restfulframework示例

    一.简单回顾vue 前不久我们已经了解了vue前端框架,所以现在强调几点: 修改源: npm config set registry https://registry.npm.taobao.org 创 ...

  7. C++标准库和标准模板库(转)

    转自原文http://blog.csdn.net/sxhelijian/article/details/7552499 C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标 ...

  8. CF1029E

    一个看起来就不对的贪心居然是正解... 但仔细思考一下,这种贪心倒的确找不到反例.. 贪心思想:每次找出离根节点最远的点,然后由根节点向这个点的父节点连边,一直连到所有点都能被覆盖即可,这样构造出的一 ...

  9. sort方法实际应用详解---javascript中对一个对象数组按照对象某个属性进行排序

    转载: 查看原文 在javascript中,对象和数组是两种不同的类型,这和php中的数组概念不同.在javascript中,也有一些精妙的算法,用来对一些对象进行排序.我在面试迅雷的时候,也拿到一道 ...

  10. Windows Internals 笔记——错误处理

    1.Windows函数检测到错误时,会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起.这种机制使得不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况. 2.Get ...