我的一个客户有一个遗留的CakePHP 2网站,它需要更新一个新的页面来生成一个PDF,我真的很难在控制器中调用新的方法。
我有很多PHP的经验,但是在过去的五年里我很少使用它,我从来没有接触过CakePHP。这个网站是由别人维护的,但是他们让我看一下,因为那个人已经离开了。我知道这个网站运行的是一个非常旧的Cake版本,我已经告诉他们了,但是他们不希望在这个时候更新它,因为它正在被替换。
我已经浏览了CakePHP文档v2,但是我的客户端routes.php文件似乎与文档中建议的通配符路径不匹配。
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");
// Call an existing method just to load a page
$this->report($id);
我已经将现有的Views/Survey/report.ctp
文件复制到Views/Survey/pdf.ctp
,因此,理论上,方法应该采取相同的操作,视图/模板也将相同。
我的问题是,虽然我可以浏览到surveys/report/123
的现有URL,如果我尝试去surveys/pdf/123
的新方法URL,我只是HTTP 302重定向到网站索引。我试图在视图中创建的文件没有被创建,但因为我没有看到一个404页面,如如果我去/surveys/invalid-url/123
,我真的不明白发生了什么。
更糟糕的是,我不能在本地运行该站点,因为它使用的所有遗留依赖项与我当前的开发机器不兼容。
根据我对CakePHP的理解,创建新的方法和新的.ctp文件应该是我所需要做的,以允许页面工作,但显然有一些我错过了。
希望一些S/O用户能给我指出正确的方向,我哪里出错了。
update正在添加默认路由,因为它们仍然保留此路由:
require CAKE . 'Config' . DS . 'routes.php';
他们正在使用[来自文档的ACL][1],并安装了AclExtras,但当我运行./Console/cake AclExtras.AclExtras aco_update
时,他们收到错误。
Error: Class QuestionsControllerDec2017 does not exist
我可以看到许多文件和文件夹的名称中有日期,我认为它们是较旧的备份。这是否会导致反射拾取它们时出现问题?
我编辑了Controller/UsersControllers.php,为新方法添加了一个条目
$this->Acl->allow($group, 'controllers/Surveys/report');
$this->Acl->allow($group, 'controllers/Surveys/download_report');
// New Line below
$this->Acl->allow($group, 'controllers/Surveys/pdf');
因此,是否存在aros_acos表未过期的情况,需要添加一个条目,但由于之前的错误,我无法动态添加。
Update 2问题是我错过了权限创建,因此由于旧代码访问必须使用
./Console/cake acl create aco Surveys pdf
1条答案
按热度按时间aiazj4mn1#
问题是,虽然我已经更新了UserController.php文件,但我没有应用ACL更改as per the docs。
我无法使用AclExtras由于遗留备份控制器破坏它造成的错误,否则这将是所需的命令:
./Console/cake AclExtras.AclExtras aco_update
所以我改用了手动方式:
./Console/cake acl create aco Surveys pdf
其中Surveys是控制器名称,pdf是方法名称