【问题标题】:HTML helper doesn't output appropriate link based on parametersHTML 帮助程序不会根据参数输出适当的链接
【发布时间】:2021-10-04 16:44:37
【问题描述】:

由于某种原因,我无法让 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']);

【问题讨论】:

  • 您的路由设置表明Users 控制器的workspace 操作将在/ 可用。假设 /slat 是您的应用前缀。所以,这正是它在这种情况下应该输出的内容。
  • 在这种情况下,解决方案是否会在调用 HTML 帮助程序时指定 URL? (即/users/workspace?)似乎工作。
  • 当“/”可以为您提供该页面时,您为什么要使用“/users/workspace”?
  • 默认情况下,我的 root 是 users/workspace,它需要一些凭据,然后转发到 /users/login。对于非管理员用户,他们看不到用户/索引,因此我需要将链接放在顶部,这实际上是面包屑,是用户/工作区。
  • 有些东西阻止您使用“用户/工作区”作为链接文本,但使用“/”作为 URL 的面包屑?

标签: php cakephp cakephp-3.0


【解决方案1】:
$routes->connect('/', ['controller' => 'Users', 'action' => 'workspace']);

据我了解,基本路径路由已经在上面的路由中定义,所以它生成“&lt;li&gt;&lt;a href="/slat"&gt;Users&lt;/a&gt;&lt;/li&gt;",当链接创建时

"$this->Html->link(h($this->request->getParam('controller')),['controller' => $this->request->getParam('controller'), '动作' => '工作区'])"

这里的 controller = "Users" 和 action="workspace",因此它获取基本路径 "/slat" 与路由上的 "/" 匹配。

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

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

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

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

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

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

同样用于为当前控制器的动作生成链接(仅在当前控制器的模板文件中提及),您不需要提及控制器的名称,只需动作名称和参数即可。

即:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多