我想知道我将如何去实现我的网站的 URL,比如http://mysite.com/ArticleTitleHere
使用 zend 框架。
我看到它的方式是实现一个正则表达式路由,但是这样 zf 将无法从常规module/controller/action
或controller/action
路由中分辨出文章 URL。我将如何实施这样的事情?
谢谢
我想知道我将如何去实现我的网站的 URL,比如http://mysite.com/ArticleTitleHere
使用 zend 框架。
我看到它的方式是实现一个正则表达式路由,但是这样 zf 将无法从常规module/controller/action
或controller/action
路由中分辨出文章 URL。我将如何实施这样的事情?
谢谢
您可以在路线中使用占位符:
routes.test.route = "/:article"
routes.test.defaults.module = default
routes.test.defaults.controller = test
routes.test.defaults.action = test
routes.test.defaults.article = ""
您可以使用 检索article
控制器中的参数$this->_getParam("article")
。其余的(通过文章名称匹配数据库条目)是您的部分。
但是您应该添加诸如 url-prefix 和/或文章 id 之类的内容,否则可能找不到其他路由。所以使用这样的东西要好得多:
routes.test.route = "/article/:id/:title"
routes.test.defaults.module = default
routes.test.defaults.controller = test
routes.test.defaults.action = test
routes.test.defaults.article = ""
routes.test.defaults.id = ""
您可以通过这种方式使用 url-Viewhelper 来创建链接:
<a href="<?php echo $this->url(array("id" => $article->id, "title" => $article->title), "test"); ?>"><?php echo $this->escape($article->title); ?></a>
并在您的控制器中进行重定向:
$this->_helper->redirector->gotoRoute(array("id" => $article->id, "title" => $article->title), "test");
请记住转义或过滤$article->title
无效字符(或非 ascii 字符)。