我们有一些网站example.com
,我想为不同的城市制作路线(例如。
example.com/city1
,example.com/city2
)。
我们还希望显示当前城市的所有其他控制器和方法(例如,
example.com/city1/:controller/:action
,example.com/city2/:controller/:action
)。
这看起来像2个或更多不同的网站,在控制器中使用相同的方法,但会根据城市显示不同的信息。
路由器前缀对我们不起作用,因为可能有超过10个城市,并且它必须在控制器中使用相同的方法。
我们可以从管理面板添加城市。
我们如何制作将从数据库中取出城市并正确显示所有链接的路线?
答案 0 :(得分:0)
Router::connect('/:city/:controller/:action/*', array());
Router::connect('/:city/:controller/*', array());
这会为您的路线添加前缀,但您的所有网址都会受到影响。可能还有一种更简单的方法。
您需要拥有example.com/New-York/users/login,而不是使用example.com/users/login。
如果您想生成所有这些链接,请告诉我们您拥有哪种控制器和方法。
我粘贴的路线适用于任何前缀(城市名称)
答案 1 :(得分:0)
我建议你稍微更改你的网址方案,使用
example.com/cities/city1
代替example.com/city1
。此更改不仅使路由/重写更容易,而且还将排除添加意外与控制器同名的城市的可能性!
(当然会有一些方法可以保留原来的命名方案,但实现起来会更困难,并且存在与控制器名称冲突的风险)
一旦你有/ cities参与其中你可以做这样的事情(示例代码取自CakePHP Routing而未经过测试,只是为了给你一个想法):
// routes.php
Router::connect(
'/cities/:city/:controller/:action/:id',
array(),
array(
// order matters since this will simply map ":id" to
// $articleId in your action
'pass' => array('id', 'city'),
'id' => '[0-9]+'
)
);
在您的控制器中:
public function view($articleId = null, $city = null) {
// some code here...
}