yii招聘后台简历模块核心是简历数据管理、状态流转与快速筛选,采用json存教育/经历、行为封装状态机、activedataprovider分页筛选、附件隔离存储及htmlpurifier内容过滤。

用 Yii 实现招聘后台的简历业务模块,核心是围绕“简历数据管理 + 简历状态流转 + 快速筛选与操作”展开,不追求大而全,重在稳定、可维护、响应快。
简历模型设计:兼顾扩展性与查询效率
简历主表(resume)建议包含基础字段:id、user_id(投递人)、job_id(应聘岗位)、status(0-待处理/1-已查看/2-面试中/3-已录用/4-已拒绝/5-已归档)、contact_info(JSON 存储电话/微信/邮箱等,避免频繁加字段)、content(富文本或 Markdown 原文,或指向附件 ID)、created_at、updated_at。不建议把教育/工作经历拆成多张关联表——初期用 JSON 字段存结构化数组更轻量,如 "education": [{"school":"XX大学","degree":"本科","year":"2020"}]。后续量大再垂直拆分。
状态机驱动简历流程,避免硬编码判断
用 Yii 的行为(Behavior)封装状态变更逻辑,比如定义 ResumeStatusBehavior,提供 apply()、interview()、reject()、archive() 等方法,每个方法内校验前置条件(如“只能从待处理转为已查看”)、触发事件(如发送通知)、更新 updated_at。控制器里只调用语义化方法,不写 if-else 判断 status == 1 && $next === 2 这类逻辑。
列表页优化:分页+高频筛选+免刷新操作
列表接口用 ActiveDataProvider 配合 yii\data\SqlDataProvider(复杂查询时);筛选项聚焦真实高频场景:岗位、状态、时间范围、关键词(对 name / phone / content 做 LIKE 或全文索引);操作按钮(如“标记面试”“一键拒信”)走 AJAX 提交,返回 JSON,前端局部更新行状态和按钮,避免整页刷新。搜索框支持回车提交,筛选条件自动保留在 URL 中,方便分享或刷新复原。
附件与内容安全:上传隔离 + 渲染防护
简历附件(PDF/Word)统一走 yii\web\UploadedFile 接收,保存到独立域名或子路径(如 resumes.example.com),禁止直接执行脚本;内容字段(如 self-intro)在前台展示前必须过 yii\helpers\HtmlPurifier 过滤,禁用 script、iframe、onerror 等危险标签;导出 PDF 功能用 mPDF 或 wkhtmltopdf,模板中变量全部用 Html::encode() 转义。











