tp 5 控制器
控制器
5.0的控制器类比较灵活,可以无需继承任何基础类库。控制器不应该过多的介入业务逻辑处理
控制器就是一个类,类里的不同的方法就是不同的操作
定义
可以继承控制器基类 不继承也可以完成相关功能
<?php
namespace app\controller;
use think\facade\Env;
use think\Controller;//命名空间也可以导入
class Index extends Controller
{
public function hello()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V5.1<br/><span style="font-size:30px">12载初心不改(2006-2018) - 你值得信赖的PHP框架</span></p></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="eab4b9f840753f8e7"></think>';
}
public function index()
{
return '环境变量' . Env::get('app_path');
}
}
双单词命名时不能双大写 url访问时为 hello_world

想原样访问可以关闭设置
// 是否自动转换URL中的控制器和操作名
'url_convert' => false,
修改根命名空间
修改app根目录空间名



渲染输出
return
json函数
view输出模板
默认输出格式为html,可以更改配置文件
// 默认输出类型
'default_return_type' => 'html',
// 默认AJAX 数据返回格式,可选json xml ...
'default_ajax_return' => 'json',
<?php
namespace app\controller;
class HelloWorld{
public function index(){
echo "Hello World\n";
$data = array(
'name' => 'ThinkPHP',
'version' => '5.1'
);
return json($data);
}
public function test(){
return view('');
}
}

http://localhost/tp5/tp5/public/index.php/hello_world/test
模板文件不存在:F:\web\phpStudy_64\phpstudy_pro\WWW\tp5\tp5\application\view\hello_world\test.html
根据报错创建模板
目录名有说法

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HelloWorld</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #f5f5f5;
}
.container {
max-width: 800px;
margin: 0 auto;
background-color: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
h1 {
color: #333;
}
</style>
</head>
<body>
<div class="container">
<h1>Hello World</h1>
<p>欢迎来到 ThinkPHP 5</p>
</div>
</body>
</html>
继承
如果继承了基类控制器,可以定义控制器的初始化方法
// 初始化
protected function initialize()
{}
会在调用控制器方法之前执行 不需要任何返回值,输出用php方式 return无效
重写一下
<?php
namespace app\controller;
use think\facade\Env;
use think\Controller;
class Index extends Controller
{
public function hello()
{
return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V5.1<br/><span style="font-size:30px">12载初心不改(2006-2018) - 你值得信赖的PHP框架</span></p></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="eab4b9f840753f8e7"></think>';
}
public function index()
{
return '环境变量' . Env::get('app_path');
}
protected function initialize(){
parent::initialize();
echo "初始化方法\n";
}
}

控制器操作
前置操作
需要继承controller类,继承后可以设置一个$beforeActionList属性创建前置方法
<?php
namespace app\controller;
use think\Controller;
class Before extends Controller
{
// 前置操作配置(规则不变)
protected $beforeActionList = [
'first', // 所有方法都会执行first
'second' => ['except' => 'one'], // 注意:你写的expect是笔误,正确是except(排除)
'third' => ['only' => 'one,two'], // 只在one、two方法执行third
];
?>
可选择
<?php
namespace app\controller;
use think\Controller;
class Before extends Controller
{
// 前置操作配置(规则不变)
protected $beforeActionList = [
'first', // 所有方法都会执行first
'second' => ['except' => 'one'], // 注意:你写的expect是笔误,正确是except(排除)
'third' => ['only' => 'one,two'], // 只在one、two方法执行third
];
// 前置方法:把return改成echo,避免终止流程
protected function first()
{
echo 'f11 '; // 用echo输出,不会终止后续执行
}
protected function second()
{
echo 'f22 ';
}
protected function third()
{
echo 'f33 ';
}
public function one()
{
echo 'f1';
}
public function two()
{
echo 'f2';
}
// 修正拼写错误:thire → three
public function three()
{
echo 'f3';
}
public function index()
{
return 'lalala';
}
}
?>
跳转和重定向
Controller类提供了两个跳转的方法
success(msg,url)
error(msg)
这俩有固定页面模板:tp/tpl/dispatch_jump.tpl
配置文件app.php可以修改跳转页面
public function index()
{
if($this->flag)
{
$this->success('注册成功','../../../');
}
else{
$this->error('失败');
}
}
空方法和空控制器
//空方法拦截
public function _empty($name)
{
return '此方法不存在'.$name;
}
<?php
namespace app\controller;
use think\Request;
class Error
{
public function index(Request $r)
{
return '此方法不存在'.$r->controller();
}
}
?>

浙公网安备 33010602011771号