要在ThinkPHP 7.0中正确创建控制器,必须确保命名空间为app\controller、继承think\Controller、路由绑定准确,且控制器置于app/controller/下;版本需为v7.0.x,目录不可嵌套,参数绑定区分路径与查询字符串,模型调用需配置数据库,中间件支持全局或单方法绑定。

想在ThinkPHP 7.0中快速写出能跑通、可维护、符合框架规范的控制器,而不是靠复制粘贴硬凑出一个能返回字符串的类——你得从命名空间路径、继承关系、路由绑定这三处入手,漏掉任何一环都会触发Class not found或Method not found错误。
确认项目结构与ThinkPHP版本匹配
打开项目根目录下的composer.json,检查"topthink/thinkphp"依赖项的版本号是否为"^7.0"或"7.0.*";若显示"8.1.0"或"dev-master",说明你实际使用的是ThinkPHP 8,本手册不适用。
执行php think version命令,终端必须输出ThinkPHP v7.0.x(x为具体小版本),否则后续所有控制器写法都将失效。
【ThinkPHP 7.0控制器必须放在app/controller/目录下,且不能嵌套多层子目录;若你把控制器放在app/controller/api/v1/User.php,框架将完全无法识别】
创建第一个控制器:三步落地
第一步:在app/controller/目录下新建Index.php文件。
第二步:写入标准结构——命名空间必须是app\controller,类名首字母大写,继承think\Controller:
namespace app\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
return 'Hello from ThinkPHP 7.0';
}
}
第三步:启动内置服务器:php think run,浏览器访问http://localhost:8000/index,页面出现"Hello from ThinkPHP 7.0"即成功。
控制器方法接收参数的两种写法
方法一:通过URL路径传参(推荐用于RESTful风格)
在Index.php中添加方法:public function read($id),然后在route/route.php中添加:Route::get('user/:id', 'index/index/read');
访问http://localhost:8000/user/123时,$id自动接收值123,无需手动解析$_GET。
方法二:通过查询字符串传参(适合筛选类操作)
直接在方法签名中声明参数名,框架自动绑定:public function search($keyword = '', $page = 1),访问http://localhost:8000/index/search?keyword=think&page=2即可生效。
【参数名必须与URL中键名完全一致,大小写敏感;keyword和Keyword会被视为两个不同参数】
调用模型完成数据操作
① 在app/model/下创建User.php,内容为:
namespace app\model;
use think\Model;
class User extends Model
{
protected $table = 'user';
}
② 回到Index控制器,在index()方法中写:$users = \app\model\User::all();
③ 返回JSON数据:return json($users);
这一步会触发数据库查询;若提示“Table 'thinkphp.user' doesn't exist”,说明你还没建表或没配置.env中的数据库信息。
中间件绑定到控制器方法
方法一:全局中间件(对整个控制器生效)
编辑app/controller/Index.php,在类定义上方加注解:@middleware \app\middleware\Auth,需确保app/middleware/Auth.php存在且实现handle()方法。
方法二:单方法中间件(精准控制)
在route/route.php中绑定:Route::get('admin/profile', 'index/admin/profile')->middleware(\app\middleware\CheckRole::class);
此时只有访问/admin/profile时才执行CheckRole中间件,其他方法不受影响。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











