【问题标题】:Cakephp route and prefixCakephp 路由和前缀
【发布时间】:2013-04-06 06:26:05
【问题描述】:

我对 CakePHP 中的路由有疑问。让我解释。

我通过Auth 组件使用身份验证。我有一个名为 account 的路由前缀。

当我想编辑用户时,我会调用 users 控制器,它会为我提供如下 URL:

/account/users/edit/5

我想要的是一个像这样的 URL:

/account/edit/5

所以我这样改变了我的路由器:

Router::connect('/:prefix/edit/:id',
    array('controller' => 'users', 'action' => 'edit'),
    array('pass' => array('id'), 'id' => '[0-9]+')
);

当我尝试访问 /account/edit/5 时它起作用了

我的问题在我看来。如何使用 Html->link 助手访问此路由?

到目前为止,我只是这样做:

'/'.$this->Session->read('Auth.User.role').'/edit/'.$this->Session->read('Auth.User.id')

但在我看来它并不是很干净。我想使用助手。

非常感谢您的帮助

【问题讨论】:

  • 无论用户角色如何,您是否始终希望该 URL 以“帐户”开头?
  • 否,url以account开头,当用户有account类型时,否则为其他前缀

标签: cakephp view router prefix


【解决方案1】:

使用前缀“account”意味着需要在控制器中执行“account_edit”之类的操作。这可能不是你想要的。另外,当会话中已经存在“id”时,为什么还要将它放在 url 中?为什么不只为所有用户使用 url "/account" 并从操作中的会话中获取 id(如果需要,还有角色)?

Router::connect('/account',
    array('controller' => 'users', 'action' => 'edit')
);

这将是生成所需 url 的简洁方式:

$this->Html->link('Account', array(
    'controller' => 'users',
    'action' => 'edit'
));
// Will return url "/account"

一般总是使用数组形式来指定 url 以受益于反向路由。

【讨论】:

  • 您好,感谢您点击会话中的 id,您是对的。关于链接,由于帐户type(前缀)是帐户,因此网址/account是指向用户仪表板的链接。要编辑,我想使用/account/edit。对于路由器,我知道该怎么做,但要使其与 html 助手匹配。谢谢
  • 好的,所以根据需要使用路由并获取链接,将 url 指定为例如。我给了。假设您使用的路线与您最初显示的路线相同,只需将 'prefix' => 'account' 添加到帮助程序用法中的 url 数组中,例如。我展示了。
  • 不,它仍然无法正常工作。它正在创建一个类似/account/users/edit 的链接。不明白为什么不能反转url
  • 再次显示你设置的路线。
  • 这是我的路线Router::connect('/:prefix/edit', array('controller' => 'users', 'action' => 'edit'));
【解决方案2】:

一切都很好,除了路由器。应该是

Router::connect('/account/*',
    array('controller' => 'users', 'action' => 'edit')
);

并使用 Helper 以各种方式创建锚链接,您可以 CHECK HERE

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2013-10-09
    • 2014-12-17
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 2014-02-19
    相关资源
    最近更新 更多