CakePHP路由:在站点范围内更改漂亮的URL

时间:2013-07-16 17:04:29

标签: cakephp routing cakephp-2.0 cakephp-2.3

假设我希望页面有一个漂亮的网址:

配置/ routes.php文件

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

如果我想将访问者发送到该页面,我可以使用以下网址:

$this->redirect('/profile');

$this->Html->link('Your Profile', '/profile');

但是,让我说我改变主意,现在我希望URL为:

/account

如何在不将/profile的每个实例更改为/account的情况下更改整个网站?

另外...

另一种问我问题的方法是如何使用Cake数组语法正确编码所有URL(我更喜欢这样做而不是硬编码):

$this->redirect(array('controller' => 'users', 'action' => 'profile'));

$this->Html->link('Your Profile', array('controller' => 'users', 'action' => 'profile'));

然后确保在调用控制器/操作组合时,它会将人员发送到URL:

/profile

将这条规则放在一个可以改变的地方。类似的东西:

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

// Later change to

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

有没有办法做到这一点,还允许传递更多的请求参数以添加到URL?

1 个答案:

答案 0 :(得分:3)

查看路由文档:http://book.cakephp.org/2.0/en/development/routing.html

app/routes.php添加:

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

现在您可以像这样创建链接:

echo $this->Html->link('Link to profile', array('controller' => 'users', 'action' => 'profile'));

或者如果您想允许其他参数:

// When somebody comes along without parameters ...
Router::connect('/profile', array('controller' => 'users', 'action' => 'profile'));
// When somebody parses parameters
Router::connect('/profile/*', array('controller' => 'users', 'action' => 'profile'));

然后你就能做出类似的事情:

$userId = 12;
echo $this->Html->link('Link to other profile', array('controller' => 'users', 'action' => 'profile', $userId));

然后,$userId将在控制器中通过以下方式提供:

echo $this->request->params['pass'][0];
// output: 12

通过这种方式,您可以轻松更改网站的网址,而无需更改每个视图/重定向或其他任何内容。请记住,您不应该更改您的控制器名称!因为那会搞得很多。明智地选择; - )