这个url结构被提议用于SEO优化。因此建议另一种结构不起作用。建议的结构是
example.com/<language>/<country>/<province>/<city>/<product>
example.com/en/spain
我希望指向CountryController
indexAction
,因为每个人的观点都不同,有时也认为布局也有变化。
以英语显示有关西班牙国家/地区的内容。如果请求example.com/en/india
应以英语显示印度,example.com/es/spain
应显示西班牙国家/地区的西班牙语页面。
example.com/en/spain/barcelona
指向CountryController
provinceAction
西班牙巴塞罗那省英语语言的内容页面。
example.com/en/spain/barcelona/barcelona
指向CountryController
cityAction
西班牙巴塞罗那省巴塞罗那市的英语语言内容页面。
example.com/en/spain/barcelona/barcelona/taxis
指向CountryController
productAction
该产品的内容页面位于巴塞罗那西班牙巴塞罗那省的英语语言。
是的,我们可以添加像
这样的路线$router = $ctrl->getRouter();
$router->addRoute(
'country_spain',
new Zend_Controller_Router_Route('spain',
array('controller' => 'country',
'action' => 'index'))
);
但在这种情况下,我们需要将整个国家列表添加到路线中。即印度,中国,巴基斯坦,联合国等。
然后将添加country_province
$router = $ctrl->getRouter();
$router->addRoute(
'country_spain_barcelona',
new Zend_Controller_Router_Route('spain',
array('controller' => 'country',
'action' => 'province'))
);
因此,如果我们有50个省,那么增加国家数量乘以各国的省数将是可怕的,而这将成为迁移到城市和产品时的更多路线。
您可以说添加类似
的内容$router = $ctrl->getRouter();
$router->addRoute(
'country',
new Zend_Controller_Router_Route('country/:country/:province/:city/:product',
array('controller' => 'country',
'action' => 'index'))
);
但是在这种情况下它就像我们将指向同一个动作,但随着请求的视图发生变化,这将成为一个胖控制器。
Zend_Controller_Router_Route_Regex的问题是我们应该有类似的问题
example.com/en/country/spain/barcelona/barcelona/taxis
以及一切行动的所有动作。由于视图完全不同,它变得很脏。可能是我可以使用的偏见。但我想知道是否有另一个好的解决方案可以解决这个问题。这是一个遗留项目,所以我对它有限制,#ZF版本是1.6。
有一个类似的例子
http://www.travelportal.info/ http://www.travelportal.info/asia http://www.travelportal.info/asia/india http://www.travelportal.info/asia/india/business-currency-economy
您如何看待,他们已经做到了这一点,他们是否会增加至少亚洲,欧洲这样的路线?
我能够让它像
一样工作 example.com/en/spain
指向CountryController
indexAction
example.com/en/spain/barcelona
指向CountryController
provinceAction
example.com/en/spain/barcelona/barcelona
指向CountryController
cityAction
example.com/en/spain/barcelona/barcelona/taxis
指向CountryController
productAction
但是我需要添加4条路线,这将很难手动添加这样的路线。
欢迎提出建议和批评,以使其更好。
答案 0 :(得分:5)
对于每个示例场景,您似乎都需要一个单独的路由,例如:
$router->addRoute(
'product',
new Zend_Controller_Router_Route(':lang/:country/:province/:city/:product', array(
'controller' => 'country',
'action' => 'product'
))
);
$router->addRoute(
'city',
new Zend_Controller_Router_Route(':lang/:country/:province/:city', array(
'controller' => 'country',
'action' => 'city'
))
);
$router->addRoute(
'province',
new Zend_Controller_Router_Route(':lang/:country/:province', array(
'controller' => 'country',
'action' => 'province'
))
);
$router->addRoute(
'country',
new Zend_Controller_Router_Route(':lang/:country', array(
'controller' => 'country',
'action' => 'index'
))
);