【ThinkPHP框架教程·Part-05】控制器定义和渲染输出

简介: 本章节介绍控制器的定义方式及其URL访问和渲染输出。控制器文件存放在`controller`目录下,可通过配置`route.php`更改默认路径。类名采用驼峰命名法并与文件名一致,如`Test.php`位于`app\controller\Test.php`。支持设置控制器后缀(如`Controller`)以避免重名冲突。渲染输出方面,ThinkPHP支持通过`return`直接输出字符串或使用`json()`函数返回JSON格式数据。调试时推荐使用助手函数`halt()`,而非`die`或`exit`。

本章节我们来了解一下控制器定义的方式,包括 URL 访问和渲染输出。

一、控制器定义

控制器,即 controller,控制器文件存放在 controller 目录下。

1、控制器目录设置

如果想改变系统默认的控制器文件目录,可以在 config 下 route.php 配置:

2、控制器访问格式

类名和文件名大小写保持一致,并采用驼峰式(首字母大写);

namespace app\controller; 
class Test {
}

从上面两段代码得知 Test.php 的实际位置为:app\controller\Test.php

在 Test 类创建两个方法 index(默认)和 hello,访问 URL 如下:

http://localhost:8000/test

http://localhost:8000/test/hello

那么如果创建的是双字母组合,比如 class HelloWorld

访问 URL 如下:

http://localhost:8000/helloworld

http://localhost:8000/hello_world

3、设置控制器后缀(选择性开启)

如果你想避免引入同类名时的冲突,可以 route.php 设置控制器后缀: 'controller_suffix' => true,

此时,为了防止重名,所有控制器后面都必须加上Controller后缀。Test.php类名就必须改成 TestController.php。


二、渲染输出

ThinkPHP 直接采用方法内 return 返回的方式直接就可以向页面输出了。

1、return返回字符串

假设我们定义一个方法想要使用return返回一个数组:

<?php
namespace app\controller;
class Test
{
    public function arrayOutput()
    {
        $data = ['a' => 1, 'b' => 2, 'c' => 3];
        return $data;
    }
}

访问后,发现不支持直接输出数组类型。

2、返回json格式

这里可以使用采用json()函数,封装成json的格式输出:

$data = array('a' => 1, 'b' => 2, 'c' => 3); 
return json($data);

此时就可以以json的格式输出到页面。

3、扩展:助手函数 halt()

另外,变量调试时,不推荐使用 die、exit 等 PHP 方法中断代码执行,推荐助手函数 halt();

<?php
namespace app\controller;
class Test
{
    public function arrayOutput()
    {
        $data = ['a' => 1, 'b' => 2, 'c' => 3];
        halt('中断测试');
        return json($data);
    }
}


目录
打赏
0
2
2
0
64
分享
相关文章
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=&gt;`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
60 5
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
Three入门 【加载外部模型,使用dat.gui创建动画控制器】
153 0
|
3月前
|
PHP
【ThinkPHP框架教程·Part-06】基础、空、多级控制器
本文介绍了ThinkPHP框架中三种控制器的使用方法:基础控制器、空控制器和多级控制器。基础控制器提供了验证功能并注入了`think\App`和`think\Request`对象,推荐继承以获得更多方法。空控制器用于单应用模式下的错误提醒,定义一个Error类即可实现。多级控制器则通过在controller目录下创建子目录来实现分组管理,例如建立group目录并在其中创建Blog.php控制器,访问路径为`http://localhost:8000/group.blog`及其方法。
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
通过 express 模拟 Apache 实现静态资源托管服务(补充)|学习笔记
快速学习通过 express 模拟 Apache 实现静态资源托管服务(补充)
TP5.1商城项目开始加载样式
TP5.1商城项目开始加载样式
104 0
TP5.1商城项目开始加载样式
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(一)
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设置什么样的属性值。那么有没有优雅的方式来设置组件的各种属性呢?我做了一个在线小工具,可以方便的设置属性,并且可以实时看到效果。
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(一)
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(二)
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设置什么样的属性值。那么有没有优雅的方式来设置组件的各种属性呢?我做了一个在线小工具,可以方便的设置属性,并且可以实时看到效果。
UI库组件属性太多不知道啥意思?没关系来看看可视化设置(二)