在CakePHP 2.x中,有一个HTML助手,允许在视图中创建超链接。
如果我使用这个...
<?php
echo $this->Html->link('Navigation',
array('controller' => 'navigations', 'action' => 'foo')
);
?>
。它将生成一个指向/navigations/foo
的URL(NavigationsController::foo)。
但是,如果我使用index
作为action
<?php
echo $this->Html->link('Navigation',
array('controller' => 'navigations', 'action' => 'index')
);
?>
网址变为/navigations
。
我知道"索引"是网页的默认设置。但是,我实际上需要 URL 是/navigations/index
的,或者至少有一个尾部斜杠 (/navigations/
)。
这可能吗?
改为修复 AJAX URL
关于您评论中的解释,我认为解决此问题的"正确"方法是对 AJAX 调用使用正确的根相对 URL,因为更改 URL 结构只会掩盖潜在的问题,即针对非唯一资源。
就我个人而言,我使用Router::url()
来生成 URL,无论是在通过 PHP 提供它们时在特定脚本文件中生成 URL,还是通过在例如布局中写出配置,它是全局的,以便脚本可以在需要时访问它:
<script>
var config = {
navigationDataUrl: <?php echo json_encode(
Router::url(array('controller' => 'Navigations', 'action' => 'get_data'))
) ?>
};
</script>
或通过配置可能存在的 JS 对象。
<script>
navigation.dataUrl = <?php echo json_encode(
Router::url(array('controller' => 'Navigations', 'action' => 'get_data'))
) ?>;
</script>
使用显式索引部分连接路由
话虽如此,为了完成,可以通过连接显式定义该部分的路由来强制不删除index
部分,而不是使用:action
route 元素,例如:
Router::connect('/:controller/index', array('action' => 'index'));
这将在 CakePHP 的默认控制器索引捕获路由处理之前匹配/捕获像您这样的 URL 数组,如下所示:
Router::connect('/:controller', array('action' => 'index'), array('defaultRoute' => true));
https://github.com/cakephp/cakephp/blob/2.10.6/lib/Cake/Config/routes.php#L72