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']);
我环顾四周,虽然有很多类似的问题,但从来没有给出有效的答案:
我正在使用 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']);