【发布时间】:2019-05-14 11:23:05
【问题描述】:
我继承了在 Cake 框架上构建的代码体,但很难理解它的路由。我知道 Cake 体现了各种约定,这意味着做出了一些神奇的假设,也许这就是我的困难。我不是蛋糕专家。
我想要实现的是/ 路由以及其他各种路由的处理程序。所以路由代码看起来像这样(为简洁起见省略了cmets):
error_log('Route(((');
Router::connect('/',array('controller' => 'users', 'action' => 'showoffpage'));
Router::connect('/logout', array('controller' => 'users', 'action' => 'logout'));
Router::connect('/admin', array('controller' => 'users', 'action' => 'login', 'admin' => true));
Router::connect('/:slug',array('controller' => 'users', 'action' => 'profile'), array('pass' => array('slug')));
CakePlugin::routes();
error_log(')))Route -- ' . json_encode(Router::$routes));
当遇到这种情况时,输出如下:
[Tue May 14 19:11:19 2019] Route(((
[Tue May 14 19:11:19 2019] )))Route -- [{"keys":[],"options":[],"defaults":{"controller":"users","action":"showoffpage","plugin":null},"template":"\/"},{"keys":[],"options":[],"defaults":{"controller":"users","action":"logout","plugin":null},"template":"\/logout"},{"keys":[],"options":[],"defaults":{"controller":"users","action":"login","admin":true,"prefix":"admin","plugin":null},"template":"\/admin"},{"keys":[],"options":{"pass":["slug"]},"defaults":{"controller":"users","action":"profile","plugin":null},"template":"\/:slug"}]
[Tue May 14 19:11:19 2019] 106.70.102.45:51080 [302]: /
[Tue May 14 19:11:19 2019] Route(((
[Tue May 14 19:11:19 2019] )))Route -- [{"keys":[],"options":[],"defaults":{"controller":"users","action":"showoffpage","plugin":null},"template":"\/"},{"keys":[],"options":[],"defaults":{"controller":"users","action":"logout","plugin":null},"template":"\/logout"},{"keys":[],"options":[],"defaults":{"controller":"users","action":"login","admin":true,"prefix":"admin","plugin":null},"template":"\/admin"},{"keys":[],"options":{"pass":["slug"]},"defaults":{"controller":"users","action":"profile","plugin":null},"template":"\/:slug"}]
[Tue May 14 19:11:19 2019] PROFILE:pages
[Tue May 14 19:11:19 2019] 106.70.102.45:51082 [200]: /pages
即,空路由立即被“重写”为/pages,即使路由表仅包含此处代码中设置的四个条目。然后将命中发送到UsersController::profile('pages')(因此诊断PROFILE:pages 输出)而不是UsersController::showoffpage()。 UsersController::showoffpage() 中有调试,但从不输出。显然,我在源代码中搜索了 pages 这个词的出现,但有 100 个。 Cake 可能会做些什么来让它重写路线,我该如何阻止它?
【问题讨论】:
-
请发布您的用户控制器。也许
showoffpagemethod 包含重定向到/pages或用户或应用控制器中的 beforeFilter 方法。