【发布时间】:2011-06-10 06:46:19
【问题描述】:
我有一个带有两个模块(管理员和公共)的 Zend 应用程序,对于公共,我有以下插件来解析我的友好 URL:
class Custom_Controller_Plugin_Initializer extends Zend_Controller_Plugin_Abstract {
protected $_front;
protected $_request;
public function __construct() {
$this->_front = Zend_Controller_Front::getInstance();
$this->_request = $this->_front->getRequest();
}
public function preDispatch(Zend_Controller_Request_Abstract $request) {
//checking if the url ends with "/"
$requestUri = $this->_request->getRequestUri();
$path = parse_url($requestUri, PHP_URL_PATH);
$query = parse_url($requestUri, PHP_URL_QUERY);
if (substr($path, -1) != '/') {
header('location: ' . $path . (isset($query) ? '/?' . $query : '/'));
die();
}
// exploding the uri to get the parts.
$uri = explode('/', substr($path, strlen(Zend_Controller_Front::getInstance()->getBaseUrl()) + 1));
$modelLanguage = new Model_Db_Language();
//checking if the first part is of 2 characters and if it's a registered language
if ($modelLanguage->checkLanguage($uri[0])) {
$language = $uri[0];
unset($uri[0]); //deleting the language from the uri.
$uri = array_values($uri);
} else {
$language = $modelLanguage->autoLanguage();
if (!$uri[0] == '' && (strlen($uri[0]) == 2)) {
$uri[0] = $language;
header('location: ' . Zend_Controller_Front::getInstance()->getBaseUrl() . '/' . implode($uri) . (isset($query) ? '/?' . $query : '/'));
die();
}
}
//remember that the language was deleted from the uri
$this->_request->setParam('requestUri', implode('/', $uri));
switch ($uri[0]) {
case 'search':
unset($uri[0]);
$this->_request->setParam('s', urldecode($uri[2]));
$this->_request->setModuleName('public');
$this->_request->setControllerName('content');
$this->_request->setActionName('search');
$this->_request->setParam('template', 'search');
break;
}
$this->_initTranslation($language);
$this->_initInterface();
}}
如果我想使用像domain.com/en/about-us/mision/ 这样的结构,这非常有用,因为我可以解析 url 并获取第一个参数“en”,然后找到与“about-us/mission”关联的页面,但如果我想使用domain.com/en/user/profile/id/1/,Zend 将“en”设置为控制器,将“user”设置为操作。如何正确设置网址中的语言?
【问题讨论】:
标签: zend-framework uri routes