CakePHP反向路由无法正常工作

时间:2015-11-03 09:47:17

标签: routing reverse cakephp-3.0

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

我正在使用CakePhp 3.0。我正在尝试连接并链接一些基本页面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是必需的。

当然,这是反向路由过程最简单的用途之一。所以它必须是可以实现的。但是 - 文档对此并不清楚。它可能在那里,但我已经阅读了很多次。

任何人都可以解释如何正确地做到这一点?

由于

瑞克

1 个答案:

答案 0 :(得分:1)

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

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

所以你可以在模板中使用路线名称:

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