HTML 助手没有根据参数输出适当的 link

HTML helper doesn't output appropriate link based on parameters

出于某种原因,我无法让 HTML 助手输出 /users/workspace

我目前正在 /users/login

上测试以下代码
echo '<li>'.$this->Html->link(h($this->request->getParam('controller')),['controller' => $this->request->getParam('controller'), 'action' => 'workspace']).'</li>';
echo '<li>'.$this->Html->link(h($this->request->getParam('controller')),['controller' => $this->request->getParam('controller'), 'action' => 'anything-here-works']).'</li>';

将输出:

<li><a href="/slat">Users</a></li>
<li><a href="/slat/users/anything-here-works">Users</a></li>

workspace是保留字还是什么?我缺少或不理解什么?

我正在使用 CakePHP 3.10。

注意路由设置:

$routes->connect('/', ['controller' => 'Users', 'action' => 'workspace']);
$routes->connect('/', ['controller' => 'Users', 'action' => 'workspace']);

据我所知,基本路径路由已经在上面的路由中定义,所以它生成“<li><a href="/slat">Users</a></li>",当link为

创建时

"$this->Html->link(h($this->request->getParam('controller')),['controller' => $this->request->getParam('controller'), 'action' => 'workspace'])"

here controller = "Users" and action="workspace", hence it gets the base path "/slat" as matches with "/" on the route.

我认为“slat”是您在本地主机上的项目目录。

您可以以更自定义的方式生成 links,即:-

<a href="<?= $this->Url->build(['controller'=>'Users','action'=>'workspace']);">" >Link</a>

如果您需要针对特定​​用户类型(如管理员)进行路由,您可以创建前缀路由 prefix routing on cakephp 3.x

另外,$this->request->getParam('controller')给出的是当前控制器的名称,所以跳转到其他页面时link可能会出错

您可以直接提及控制器名称,而不是使用“getParam”

也为当前控制器的动作生成link(仅在当前控制器的模板文件中提及),您无需提及控制器名称,只需动作名称和参数即可。

即:

<a href="<?= $this->Url->build(['action'=>'workspace']);">" >Link</a>