如何在现有CakePHP 2项目中新增URL路由并解决访问跳转问题
CakePHP2 遗留站点新增控制器方法访问跳转问题排查
问题背景
现有客户的CakePHP2遗留站点需要新增PDF生成页面,开发人员有丰富PHP开发经验,但近五年较少使用PHP,且从未接触过CakePHP框架。客户已知站点版本过旧,但因站点即将下线暂不计划升级。受遗留依赖限制,无法在本地搭建运行环境。
已执行操作
- 路由配置确认:站点
routes.php已引入CakePHP默认路由require CAKE . 'Config' . DS . 'routes.php';,现有首页路由为:Router::connect('/', array('controller' => 'surveys', 'action' => 'index')); - 控制器修改:在
Controller/SurveysController.php中新增测试方法:public function pdf($id, $type = 1) { file_put_contents("/tmp/debug.log", "inside the new method"); // 调用现有方法加载页面 $this->report($id); } - 视图文件准备:将现有视图
Views/Survey/report.ctp复制为Views/Survey/pdf.ctp,逻辑与现有正常访问的report方法完全一致 - 权限配置更新:在
Controller/UsersControllers.php中新增该方法的权限配置:$this->Acl->allow($group, 'controllers/Surveys/report'); $this->Acl->allow($group, 'controllers/Surveys/download_report'); // 以下为新增行 $this->Acl->allow($group, 'controllers/Surveys/pdf');
异常现象
- 现有路径
surveys/report/123可正常访问,但新路径surveys/pdf/123访问时返回302跳转到站点首页,控制器方法内的日志未生成,也没有像访问无效路径/surveys/invalid-url/123一样返回404页面 - 运行AclExtras同步命令
./Console/cake AclExtras.AclExtras aco_update时报错:Error: Class QuestionsControllerDec2017 does not exist,推测是站点内存放的带日期后缀的旧备份控制器文件,导致框架反射扫描类时出错 - 怀疑是
aros_acos权限表缺少对应方法的权限条目,而上述同步命令报错导致权限无法自动生成
最终解决方案
问题根源为遗漏了访问控制对象(ACO)的手动创建步骤,执行如下CLI命令创建对应权限节点后问题解决:
./Console/cake acl create aco Surveys pdf
内容的提问来源于stack exchange,提问作者Steve Mapes
相关产品推荐
相关产品推荐

