CakePHP 反向路由不起作用

CakePHP reverse routing not working

我环顾四周,虽然有很多类似的问题,但从来没有给出有效的答案:

我正在使用 CakePhp 3.0。我正在尝试连接 link 一些基本页面 url 到框架。

就正常路由而言,这已按预期工作。出于调试目的,我已经删除了所有路由,因此以下是目前唯一活跃的路由:

Router::scope('/', function ($routes) {
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home', '_name' => 'home']);
    $routes->connect('/events', ['controller' => 'Pages', 'action' => 'display', 'events', '_name' => 'events']);
    $routes->fallbacks('DashedRoute');
});

如果您手动转到 //events,这些将按预期工作。

现在,如果我尝试反转路线(这是最佳做法),我会使用以下内容:

echo $this->Html->link('News', ['controller' => 'Pages', 'action' => 'home', '_full' => true] );

.. 和..

echo $this->Html->link('Events', ['controller' => 'Pages', 'action' => 'events', '_full' => true] );

这些错误地给我 /pages/home/pages/events。事实上,//events 是必需的。

当然,这是反向路由过程最简单的用途之一..所以它一定是可以实现的。但是 - 文档对此一点都不清楚。里面可能有,不过我已经看了好几遍了。

谁能解释一下如何正确执行此操作?

谢谢

瑞克

connect()的调用略有不正确。 _name 参数应该在函数调用的第三个参数中:

$routes->connect('/events', ['controller' => 'Pages', 'action' => 'display', 'events'], ['_name' => 'events']);

因此您可以只在模板中使用路由名称:

$this->Html->link('Events', ['_name' => 'events']);