Cakephp路由和前缀

时间:2013-04-06 06:26:05

标签: cakephp view router prefix

我在CakePHP中遇到路由问题。让我解释。

我正在使用Auth组件进行身份验证。我有一个名为account的路由前缀。

当我想编辑用户时,我正在调用用户控制器,它为我提供了一个URL:

/account/users/edit/5

我想要的是拥有如下网址:

/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')

但在我看来,这并不是很干净。我想使用帮手。

非常感谢你的帮助

2 个答案:

答案 0 :(得分:1)

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

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

这将是生成所需网址的简洁方法:

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

通常总是使用数组形式来指定url以从反向路由中受益。

答案 1 :(得分:0)

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

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

使用Helper以各种方式创建锚点链接CHECK HERE