当前位置: 首页 > news >正文

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属性创建前置方法

<?phpnamespace 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    ];
?>

可选择

<?phpnamespace 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();
        }
    }
?>
http://www.jsqmd.com/news/355419/

相关文章:

  • 【转载】i.MX RT1176 Nor Flash启动中DEBUG正常但RELEASE版本失败的问题
  • 别被“藏拙和站队”骗了:职场的真相,从来不是能力无用:能力为王,人际为后
  • 激化矛盾进行“利益绑定”,才是解决矛盾的终极捷径,在职场中出现对立的事情,就以请教的姿态拉人头参与进行矛盾激化,可以说是拿别人当枪使
  • 课程论文不用熬!虎贲等考 AI 一键解锁高效写作,轻松拿捏各科作业
  • 工资不上涨,一只给我实习工资,该怎么破局?时机就是你在承担了大项目的时候,你是主导者的时候,并且在外面试过,自己是有性价比的
  • 【嵌入式就业10】Linux内核深度解析:从启动流程到驱动框架的工业级实践
  • 建筑企业破局增长,如何以一体化管理实现数字化升级?
  • 北京回收老字画|丰宝斋老字号守护,专业修复,传承文化瑰宝 - 品牌排行榜单
  • 2026杭州GEO服务商权威排名|10家核心企业实力优劣全剖析,AI搜索+语义预判赋能本地企业突围 - 速递信息
  • 美通卡回收变现优选平台京顺回收 - 京顺回收
  • AI能编完美程序,程序员行业会消失吗?从业者实测一年后说实话
  • 数字孪生热力图可视化为何被广泛应用? - 教程
  • 清空分类 + 统一到固定或指定分类
  • 2026年比较好的探伤防护门,工业探伤防护铅门厂家综合实力参考 - 品牌鉴赏师
  • CANN模型转换:从训练框架到端侧推理的全链路无缝迁移实战
  • CANN自动调优:从算子级搜索到全模型性能优化的全链路智能调优实战
  • 分布式专题——51 ES 深度分页难题及其解决方案详解
  • CANN联邦学习:从隐私保护到跨域协同的全链路安全训练实战
  • AI 白嫖代码:中小型开发组织的开源困境与破局之道 —— Blazor WASM 与 MWGA 如何帮助中小团队在 AI 时代破局
  • 头部天猫超市购物卡回收平台推荐 - 京顺回收
  • 不踩雷! 降AIGC网站 千笔·降AIGC助手 VS 锐智 AI,本科生专属首选
  • 人工设计问卷vs虎贲等考AI:3天vs30分钟,学术级问卷原来可以这么做
  • 真心不骗你!专科生专用AI论文平台 —— 千笔·专业论文写作工具
  • 阻尼器,缓冲器,旋转阻尼器,旋转缓冲器,车载阻尼器,门盖类缓冲器,缓降器生产厂家,深圳市宁博尔科技有限公司 - 品致汇
  • JVM源码阅读
  • 【毕设】java-springboot+vue“漫画之家”系统毕业设计
  • 反传统租客,摒弃用户搜房源,根据用户预算,工作地点,生活习惯(如喜欢做饭,养宠物),自动匹配房源,还能AI虚拟看房,无需实时跑,节省时间。
  • 2026最新电子胶工厂top5推荐!国内优质电子胶厂商权威榜单发布,资质服务双优助力产业升级 - 品牌推荐2026
  • 深入解析:Spring Boot 自动配置原理深度解析与实战
  • 自动驾驶安全评估框架:基于物理的机制能力测试