thinkphp 8 crm系统搭建需先确保环境纯净、正确安装框架、配置数据库与调试模式、创建迁移表并生成模型与控制器,任一环节出错将导致后续功能无法运行。

想用ThinkPHP 8快速搭出一个能录入客户、查跟进记录、导出联系人列表的CRM系统,却卡在数据库连不上、控制器返回空白、路由访问404——这不是业务逻辑没想清,是框架骨架没立稳、模型没映射、路由没注册,后续所有功能都跑不起来。
确认并初始化TP8项目环境
打开命令行,进入你计划存放CRM项目的纯英文路径(如 D:\crm-system),确保该目录完全为空——Composer拒绝往非空目录写入骨架,强行操作会报错“Destination directory is not empty”。
执行安装命令:composer create-project topthink/think . --stability=stable --remove-vcs。注意末尾的英文句点 .,它代表当前目录,漏掉或写成crm会导致vendor/和public/散落在子目录里,后续所有路径全错。
安装完成后,立刻验证三件事:运行php think看是否列出命令列表;运行php -v确认输出版本≥8.1;检查public/index.php是否存在——缺任一者,说明安装中断或镜像源异常,删光重来。
配置数据库与调试模式
把项目根目录下的.example.env重命名为.env,用文本编辑器打开它。
修改数据库连接参数:
DB_HOST=127.0.0.1<br>DB_PORT=3306<br>DB_NAME=crm_db<br>DB_USER=root<br>DB_PASS=your_password
把APP_DEBUG=true这行前面的#号删掉,否则错误信息全被屏蔽,你永远不知道控制器为啥返回空白。这一步不做,后续任何SQL报错都只显示500,没法定位问题根源。
在MySQL中手动创建名为crm_db的数据库,字符集选utf8mb4,排序规则用utf8mb4_unicode_ci——用latin1会导致中文姓名存成问号,且无法回退。
生成客户数据表与模型
在项目根目录执行:php think make:model Customer。这会在app/model/下生成Customer.php,同时在database/migrations/下生成时间戳开头的迁移文件。
打开刚生成的迁移文件,把up方法改成:
$this->connection->execute('CREATE TABLE `customer` (<br> `id` int UNSIGNED NOT NULL AUTO_INCREMENT,<br> `name` varchar(100) NOT NULL,<br> `phone` varchar(20),<br> `email` varchar(100),<br> `created_at` datetime DEFAULT CURRENT_TIMESTAMP,<br> PRIMARY KEY (`id`)<br>) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;');
保存后执行:php think migrate:run。如果提示“Class 'think\migration\Command' not found”,说明你漏装了迁移扩展,立即运行composer require topthink/think-migration再重试。
编写客户列表控制器
执行:php think make:controller api/Customer,生成app/controller/api/Customer.php。
打开该文件,替换全部内容为:
<?php <br>namespace app\controller\api;<br><br>use app\BaseController;<br>use app\model\Customer;<br><br>class Customer extends BaseController<br>{<br> public function index()<br> {<br> return json(Customer::select());<br> }<br>}
这一步必须用json()包装返回值,直接return Customer::select()会触发视图渲染,而API控制器默认无模板,结果是空白页。
注册RESTful路由
打开app/route/app.php,在文件末尾return [];之前插入:
Route::rule('api/customer', 'api/Customer@index', 'GET');
别写成Route::get('api/customer', ...)——TP8的Route::get不支持自动绑定控制器方法,必须用Route::rule显式指定类@方法,否则访问时提示“route not found”。
保存后,在项目根目录执行:php think run,启动服务器。
打开浏览器,访问http://localhost:8000/api/customer,看到返回JSON格式客户列表即表示路由通、模型通、数据库通。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











