我有一个纯粹由数据库驱动的网站。我是Zend Framwork的新手,也是路由的概念,尽管我已经做了很多阅读。大脑几乎是一块海绵,有些东西仍然试图被理解。我主要使用ZF进行路由,但我计划尽可能实现其他方面。在大多数情况下,这是一个学习过程,所以有些事我想在没有框架的情况下自己写作。
以下是该网站应如何运作: URL可以是“/” - 根索引到的任何内容 “/ contact / - 根文件,到 “/ deposits /” - 一个子目录 “/ deposits / ira /” - 子目录中的文件。
当用户点击链接代码时,需要解析REQUEST_URI以查看数据库的“pages”表。唯一的目的是获取与REQUEST_URI匹配的记录的ID。该ID是页面所有内容的关键,然后检查其他表以查看是否有任何数据需要获取页面的其他方面。迫切需要的是模板名称。该网站将使用一些不同的页面,具体取决于它是主页,部分登录页面还是部分内容。当页面保存到数据库时,将决定此信息。
我希望能够获取这些数据,然后决定如何路由它以便它使用正确的模板,并从该点收集其余数据以完成页面。
由于可以随时创建节和页面,因此必须有控制器可以根据返回的模板数据处理要执行的操作。这几乎意味着控制器等需要一些标准化的名称,这些名称与REQUEST_URI中传递的值无关。
如何在Zend中完成此操作,以便在选择控制器之前完成所有这些操作,并且只有模板名称才能选择正确的控制器?
谢谢, CY
答案 0 :(得分:0)
如果真的是所有你的路线(至少对于前端)是动态的,那么听起来你可以这样做:
在引导程序中,删除所有默认路由。
在routeStartup
的插件中,抓住REQUEST_URI
并查询您的数据库。据推测,该记录包含足够的信息,可以找出所需的控制器,动作,布局等。
2.1将单个路由(与REQUEST_URI匹配)映射添加到控制器和操作。
2.2将布局设置为所需的布局。
然后在正常调度期间,路线将匹配,控制器/操作将被调用,您将正确设置布局。
如果请求与数据库中存储的任何页面都不匹配,则必须自己调用错误控制器/操作以提供404响应。
但是,如果您的应用程序中最终有一些静态(即非db存储的)路由(我认为必定是这种情况),那么在您点击数据库之前,您需要匹配它们。搜索请求的那个。这种匹配听起来很痛苦(尽管可能有一种方法可以询问路由器本身,如果请求的路由匹配,就像标准调度员那样)。
在这种情况下,或许另一种方法是在引导程序中以标准方式将所有这些(非db存储的)路由添加到路由器,并将所有这些REQUEST_URI
检查,数据库搜索, 404处理程序中的控制器/操作/布局处理。如果请求的URL匹配数据库中的某些内容,则_forward()
(不重定向)到该控制器/操作并设置布局,如上所述。
它可能不是最高效的解决方案 - 因为_forward()
在调度循环中触发了另一次迭代 - 但似乎它可以工作。