3

此 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-货币经济

你怎么看,他们已经做到了,他们会像那样增加至少亚洲、欧洲的航线吗?

我能够让它像

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 条路由,这样手动添加路由会变得很困难。

欢迎提出建议和批评,以使其变得更好。

4

1 回答 1

5

It seems like you want a separate route for each of your example scenarios, e.g.:

$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'
    ))
);
于 2012-02-03T12:37:34.610 回答