2

我有一个纯数据库驱动的网站。我是 Zend Framwork 和路由概念的新手,虽然我已经做了很多阅读。大脑几乎是一块海绵,有些东西仍在试图被理解。我主要将 ZF 用于路由,但我计划在可能的情况下实现它的其他方面。在大多数情况下,这是一个学习过程,所以有些东西我想在没有框架的情况下自己编写。

以下是该站点的工作方式: URL 可以是任何内容,从“/” - 根索引,到“/contact/ - 根文件”,再到“/deposits/” - “/deposits/ira/”的子目录 -子目录中的一个文件。

当用户单击链接代码时,需要解析 REQUEST_URI 以查看数据库的“页面”表。这样做的唯一目的是获取与 REQUEST_URI 匹配的记录的 ID。该 ID 是页面所有内容的关键,然后检查其他表以查看是否需要获取页面其他方面的任何数据。迫切需要的是模板名称。该站点将使用几个不同的页面,具体取决于它是主页、部分登录页面还是部分的内容。此信息是在将页面保存到数据库时决定的。

我希望能够获取这些数据,然后决定如何路由它,以便它使用正确的模板并可以从该点收集其余数据以完成页面。

由于可以随时创建部分和页面,因此必须有控制器可以根据返回的模板数据处理要做什么。这几乎意味着控制器等将需要一些标准化的名称,这些名称与 REQUEST_URI 中传递的值无关。

我将如何在 Zend 中完成此操作,以便所有这些都发生在选择控制器之前,并且只有模板名称可以用于选择正确的控制器?

谢谢,赛

4

1 回答 1

0

如果您的所有路由(至少对于前端)确实是动态的,那么听起来您可以这样做:

  1. 在引导程序中,删除所有默认路由。

  2. 在插件中routeStartup,获取REQUEST_URI并查询您的数据库。大概该记录包含足够的信息让您找出所需的控制器、操作、布局等。

    2.1 添加单个路由(匹配REQUEST_URI)映射到控制器和动作。

    2.2 将布局设​​置为所需布局。

然后在正常调度期间,路由将匹配,控制器/动作将被调用,您将正确设置布局。

如果请求与存储在您的数据库中的任何页面都不匹配,您必须自己调用错误控制器/操作以给出 404 响应。

但是,如果您的应用程序中最终有一些静态(即非数据库存储)路由(我想一定是这种情况),那么您需要在点击数据库搜索之前匹配它们请求了一个。这种匹配听起来很痛苦(尽管可能有一种方法可以询问路由器本身是否匹配请求的路由,就像标准调度程序一样)。

在这种情况下,也许另一种方法是在引导时以标准方式将所有这些(非数据库存储的)路由添加到路由器,并将所有这些REQUEST_URI检查、数据库搜索和控制器/动作/布局处理放入404 处理程序。如果请求的 url 与您的数据库中的某些内容匹配,则_forward()(不重定向)到该控制器/操作并设置布局,如上所述。

它可能不是最高效的解决方案——因为_forward()在调度循环中触发了另一个迭代——但它似乎可以工作。

于 2012-12-20T09:14:49.233 回答