A 控制器 命名 访问 加载 初始化1 命名首字母大写并驼峰形式
2 浏览器访问驼峰形式控制器会报错 将中间大写字母前加下划线
如:访问http://www.tp5.com/UserInfo 因改为 http://www.tp5.com/User_Info
0 方法里的return
正常不加载页面时 return 是返回打印出值
这是在配置文件 'default_return_type' => 'html', 决定的,如果是json 那么方法里返回打印就是json 格式了
1 加载静态页面 和传数据
加载有两个方法 系统类 和 系统方法
<?php $view = new \think\View; return $view->fetch('type'); return view("type");
加载视图的数组遍历
用户展示页面 ID NAME PASS {volist name='data' id='value'} {:$value['id']} {:$value.username} {:$value.password} {/volist}
2 使用系统相关方法得继承系统控制器
<?php namespace app\index\controller; use think\Controller; class Index extends Controller { public function type() { return $this->fetch('type');
3 控制器的初始化方法
所有控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行。
<?php public function _initialize() { echo 'init<br/>'; }
4 前置方法
使用案例:可以把一些检查等 公共方法提取出来 ,放控制器头部,能减少代码冗余
<?php namespace app\index\controller; //引用系统控制器类和 数据类 use think\Db; use think\Controller; class Blog extends Controller { protected $beforeActionList = [ 'first', //所有方法都可用 'second' => ['except'=>'index'], //除了index 其他都可用 // 执行 getcreate getread两个方法之前先操作 three 方法 'three' => ['only'=>'getcreate,getread'], //只给getcreate,getread 使用 ];
B 控制器的跳转
1 跳转函数
继承\think\Controller而使用到的success 和error 方法是基于 /thinkphp/library/traits/controller/jump.php 类里的原生方法
<?php public function check() { $name = $_POST['name']; $password = $_POST['password']; if($name=='666' && $password=='777') { //success('提示信息','跳转地址','数据','等待几秒','header信息') $this->success('登录成功鸟',url('index/index')); } else { $this->error(); } }
2 更改模板
a 首先在 配置文件里面 找到配置参数 并更改
b 找到 模板位置 \WWW\thinkphp5\thinkphp\tpl\dispatch_jump.tpl
c 然后新建文件 参照下面的参数和 原来模板 编写模板
变量 含义
$data 要返回的数据
$msg 页面提示信息
$code 返回的code
$wait 跳转等待时间 单位为秒
$url 跳转页面地址
//默认错误跳转对应的模板文件 'dispatch_error_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl', //默认成功跳转对应的模板文件 'dispatch_success_tmpl' => APP_PATH . 'tpl/dispatch_jump.tpl',
d 使用bootstrap 写事例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Document</title> <link rel="stylesheet" type="text/css" href="/static/bs/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="col-md-4"></div> <div class="col-md-4"> <div class="panel panel-primary"> <div class="panel-heading"><?=$msg ?></div> <div class="panel-body"> <img src="/static/success.jpg" width="100%"> <p class="jump"> 页面自动 <a id="href" href="<?php echo($url);?>">跳转</a> 等待时间: <b id="wait"><?php echo($wait);?></b> </p> </div> </div> </div> </div> <script type="text/javascript"> (function(){ var wait = document.getElementById('wait'), href = document.getElementById('href').href; var interval = setInterval(function(){ var time = --wait.innerHTML; if(time <= 0) { location.href = href; clearInterval(interval); }; }, 1000); })(); </script> </body> </html>
C 重定向
<?php public function strict() { //redirect( $url, $params = [参数传递], $code = 302, $with = [隐式传参]) $this->redirect('index/api',['name'=>'小黄','school'=>'机电'],302,[]); }
D 空操作和空控制器 和资源控制器
空操作 是指系统在找不到指定的操作方法时,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。
空控制器 是指当系统找不到指定的控制器名称的时候,系统会尝试定位空控制器(Error),利用这个机制我们可以用来定制错误页面和进行URL的优化。
建议网站上线前,前后台都写空控制器,并每个控制器都写空方法
1 空操作
<?php public function _empty() { $this->api(); //不改变浏览器url地址 $this->redirect('api'); //改变浏览器url地址 }
2 空控制器
空控制器Error是可以定义的
// 更改默认的空控制器名
'empty_controller' => 'MyError',
<?php <?php namespace app\index\controller; //引用系统控制器类 use think\Controller; class Error extends Controller { public function index() { $this->redirect('/'); } public function _empty() { $this->redirect('/'); } }
3 资源控制器
进入命令行 进入网站根目录 \WWW\thinkphp5
// 生成index模块的Blog资源控制器 php think make:controller index/Blog // 生成model数据模型 php think make:model index/User // 清除 runtime 文件夹里的 临时文件 php think clear
E 自定义控制器
1 我们可以在某模块下 新建文件夹basic并新建common类
2 然后可以 controller('common','basic'); 实例化
以下代码 第二参数 可看出 ,然后放些可任意调用的方法 方便调用,譬如公共的控制器基础类来被继承
也可以在视图里 第三参数 demo 使用 action 直接调用方法返回数据
<?php /** * 实例化控制器 格式:[模块/]控制器 * @param string $name 资源地址 * @param string $layer 控制层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return \think\Controller */ function controller($name, $layer = 'controller', $appendSuffix = false) { return Loader::controller($name, $layer, $appendSuffix); } /** * 调用模块的操作方法 参数格式 [模块/控制器/]操作 * @param string $url 调用地址 * @param string|array $vars 调用参数 支持字符串和数组 * @param string $layer 要调用的控制层名称 * @param bool $appendSuffix 是否添加类名后缀 * @return mixed */ function action($url, $vars = [], $layer = 'controller', $appendSuffix = false) { return Loader::action($url, $vars, $layer, $appendSuffix); }
譬如新建
<?php namespace app\admin\basic; use think\Controller; class Common extends Controller{ public function common1() { return 'basic文件夹的common/common1'; } }
无论在哪个模块调用
<?php $con = controller('admin/Common','basic'); return $con->common1(); //直接调用 return action('admin/Common/common1','','basic');