[英]Url language prefix with zend framework
我迷失了Zend Framework的URL重寫! 我有這樣的route.ini
:
routes.page.route = :slug
我在bootstrap中有這樣的電話:
protected function _initRoutes() {
$uri = explode('/', $_SERVER['REQUEST_URI']);
if (!in_array('admin', $uri)) {
//$front = Zend_Controller_Front::getInstance();
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini');
$router = $front->getRouter();
$router->addConfig($config, 'routes');
$front->registerPlugin(new Rez_Controller_Plugin_Routing(), 2);
}
}
插件是這樣的:
class Rez_Controller_Plugin_Routing extends Zend_Controller_Plugin_Abstract {
public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$item_db = new Application_Model_DbTable_Item();
if(NULL != $request->getParam("slug")){
if("admin" == $request->getParam("slug")){
$request->setModuleName('admin');
$request->setControllerName("index");
$request->setActionName('index');
}
$page = $item_db->getPage($request->getParam("slug"));
if(FALSE == $page){
$request->setModuleName('default');
$request->setControllerName($request->getParam("slug"));
$request->setActionName('index');
return;
}else{
if(NULL !== $request->getParam("language")){
$page["lang"] = $request->getParam("language");
}
$request->setModuleName('default');
$request->setControllerName("index");
$request->setActionName('page');
$request->setParams($page);
return;
}
}
}
問題是,僅當瀏覽器的語言為英語或用戶單擊英語標記時,我才必須在URL "htttp://mywebsite.com/en/a-simple-page"
語言前綴。 ,該網址必須類似於"http://mywebsite.com/a-simple-page"
。
我試圖在route.ini中添加它:
routes.page.route = :language/:slug
routes.page.reqs.language = "^(en|nl)$"
routes.page.defaults.language = "nl"
但是當我嘗試"http://mywebsite.com/a-simple-page"
它不起作用,而"http://mywebsite.com/en/a-simple-page"
起作用了,我可以在其中獲取參數了插件。 即使語言代碼不在URL中,如何使它接受所有URL?
為此,您需要鏈接2條路線。
resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.abstract = On
resources.router.routes.defaultmodule.defaults.module = "default"
resources.router.routes.locale.type = Zend_Controller_Router_Route
resources.router.routes.locale.route = ":locale"
resources.router.routes.locale.reqs.locale = "^(en)$"
resources.router.routes.locale.defaults.locale = "nl"
resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
resources.router.routes.default.chain = "locale,defaultmodule"
請記住,由於SEO的影響,在2個URL下包含相同的內容是不好的。 重定向會更合適。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.