thinkphp 6.0五大核心目录为app、public、config、route、runtime:app存放业务代码且命名空间为app\;public是唯一web入口和静态资源目录;config自动加载全局配置;route负责url路由映射;runtime需可写以支持缓存与日志。

刚用Composer拉完ThinkPHP 6.0项目,看到tp6目录里一堆文件夹却不知道哪个该改、哪个绝不能动,连public/index.php都犹豫要不要碰——这不是配置问题,是没看懂它的结构逻辑。
看清ThinkPHP 6.0的五大核心目录
打开项目根目录,先盯住这五个不可删、不可挪、必须理解作用的目录:app、public、config、route、runtime。
app目录是业务代码唯一合法落脚点,所有控制器、模型、中间件类都必须放在这里,且命名空间自动映射为App\,【删掉app目录等于删掉整个应用逻辑】。
public是Web服务器唯一能直接访问的目录,index.php是唯一入口,.htaccess或Nginx规则只对它生效;static资源(CSS/JS/图片)必须放public下,放错位置浏览器会404。
config目录集中管理所有配置项,database.php控制数据库连接,view.php决定模板引擎行为,middleware.php注册全局中间件——这些文件不手动加载,框架启动时自动读取。
route目录只管一件事:把URL路径翻译成“哪个控制器+哪个方法”,route.php里写Route::get('user/:id', 'user/read'),访问/user/123才会触发User控制器的read方法。
runtime是框架自动生成的缓存与日志仓库,包含cache、log、temp、view四个子目录;【部署时必须确保该目录可写,否则路由缓存无法生成、日志无法记录】。
控制器(C)怎么写才符合规范
控制器必须放在app/controller目录下,文件名与类名严格一致,比如Index.php内必须定义class Index extends think\Controller。
方法名不能以_开头,否则被框架视为私有方法不响应HTTP请求;返回字符串会直接输出,返回数组会自动转JSON(开启API模式时)。
方法中调用模型必须用完整命名空间或use声明,例如use app\model\User; $user = User::find(1); —— 直接new User()会失败,因为模型类由容器统一管理。
模型(M)与数据库交互实操
在app/model目录下新建User.php,内容如下:
数据库表名默认为user(小写、单数),若实际表名为tp_users,需在类中添加protected $table = 'tp_users';。
执行查询前确认config/database.php已正确填写host、username、password、database字段,否则$users = User::select()会抛出PDOException异常。
视图(V)渲染与变量传递
方法一:使用内置模板引擎渲染HTML页面
在app/view目录下创建index/index.html,写入
欢迎,{$name}
;控制器中return view('index/index', ['name' => '张三']);即可将$name变量注入模板。方法二:直接返回JSON数据(适合前后端分离)
控制器中return json(['code' => 200, 'data' => ['id' => 1, 'name' => '李四']]); 框架自动设置Content-Type为application/json并输出格式化结果。
注意:view目录不是public子目录,它只供框架内部读取,浏览器无法通过URL直接访问view下的任何文件。
启动调试与快速验证流程
第一步:确保PHP版本≥7.2.5,终端执行php -v验证;
第二步:进入项目根目录,执行php think run启动内置服务器;
第三步:浏览器访问http://127.0.0.1:8000/,看到“ThinkPHP V6.0”即基础环境就绪;
第四步:修改app/controller/Index.php中的index方法,返回return 'Hello MVC!';,刷新页面验证控制器是否生效;
第五步:在config/app.php中把'app_debug'设为true,错误信息将完整显示在页面上,开发阶段必须开启。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











