【发布时间】:2013-06-19 12:41:20
【问题描述】:
我迷失在 Zend Framework 的 url 重写中!
我有一个这样的route.ini:
routes.page.route = :slug
我在引导程序中有这样的电话:
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" 中添加语言前缀,只有当浏览器的语言是英语或用户点击了英语标志时,否则 URL 必须像 "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?
【问题讨论】:
-
我设法通过在 route.ini 中添加更多路由来解决我的问题
-
只是一个建议,为什么不使用 PHP 检测用户语言,然后使用会话存储呢?在网站顶部显示一个小标志选项,例如graphicz.co.uk/en检测语言:dyeager.org/blog/2008/10/…
标签: php zend-framework url url-rewriting