三天内跑通带登录权限的后台系统,应优先选thinkphp 6:确认php≥7.4后,用composer快速创建项目,执行php think build生成admin模块,通过路由绑定验证基础结构;登录用预设bcrypt密码绕过加密陷阱,权限拦截靠中间件强制跳转。

新手想三天内跑通一个能增删改查、带登录权限的后台系统,又怕选错框架踩坑浪费时间,就得先看清每个PHP框架的真实表现——不是看官网宣传,而是看它在真实开发中哪一步会卡住你、哪一步能让你直接跳过。
选框架:别被“功能多”骗了,先盯死这三点
第一步,打开终端,执行 php -v 确认本地PHP版本 ≥ 7.4;【低于7.4的环境强行装Laravel 10或ThinkPHP 6会报致命错误】。
第二步,对照项目实际需求快速过滤:如果是个人博客或企业官网后台,选ThinkPHP 6或Laravel 10;如果是给客户做定制化SaaS后台且团队有Symfony经验,再考虑Symfony;CodeIgniter仅适用于遗留系统维护或极简CMS类项目。
第三步,用一条命令验证框架是否真能“开箱即用”:运行 composer create-project topthink/think tp-demo → 等待安装完成 → 进入目录执行 php think run → 浏览器打开 http://localhost:8000。页面显示“ThinkPHP V6.0”即通过,失败则立刻换Laravel,不要调试。
三分钟初始化后台骨架(以ThinkPHP 6为例)
方法一:用内置命令生成admin模块
在项目根目录执行:php think build --module admin,自动创建 app/admin 目录及基础控制器、中间件、配置文件。
方法二:手动建结构(适合理解底层)
新建 app/admin/controller/Index.php,写入最简首页逻辑:
→ 定义命名空间 namespace app\admin\controller;
→ 继承 think\Controller
→ 写 public function index() { return '后台已启动'; }。
方法三:用路由快速暴露接口
编辑 route/app.php,添加一行:Route::get('admin', 'admin/index/index');。此时访问 /admin 就能触发刚写的index方法——这步验证了路由与控制器打通,比写完整登录页更早暴露配置问题。
登录功能实操:绕过密码加密陷阱
第一步:用命令行快速建用户表
执行 php think migrate:create create_users_table → 打开生成的迁移文件 → 在 up 方法里写:$table->string('username', 50)->unique(); $table->string('password', 255); → 保存后执行 php think migrate:run。
第二步:插入测试账号(跳过前端表单)
直接在数据库执行:INSERT INTO users (username, password) VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'); —— 这是bcrypt加密的明文“password”,【千万别手写password_hash()函数再复制结果,容易因盐值生成差异导致登录失败】。
第三步:写登录验证逻辑
在 app/admin/controller/Login.php 中,login() 方法里用 db::name('users')->where('username', $user)->find() 查用户 → 用 password_verify('password', $row['password']) 校验 → 成功则 session('admin_id', $row['id']) 并重定向到 /admin。
权限拦截:让未登录者连404都看不到
① 创建中间件:php think make:middleware CheckAdminLogin
② 编辑该中间件的 handle() 方法,在开头插入:if (!session('?admin_id')) { return redirect('/admin/login'); }
③ 在 app/admin/middleware.php 中注册中间件:'check_login' => \app\middleware\CheckAdminLogin::class
④ 修改 route/app.php,将后台所有路由包进中间件组:Route::group(['middleware' => ['check_login']], function () { Route::get('index', 'admin/index/index'); Route::get('users', 'admin/user/index'); }); —— 这样哪怕用户手动输入 /admin/users,也会被强制跳转到登录页,不会返回空数据或报错页面。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











