假设我希望页面有一个漂亮的网址:
配置/ 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?
答案 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
通过这种方式,您可以轻松更改网站的网址,而无需更改每个视图/重定向或其他任何内容。请记住,您不应该更改您的控制器名称!因为那会搞得很多。明智地选择; - )