Zend框架动态路由



我有一个纯数据库驱动的网站。我是Zend Framwork和路由概念的新手,尽管我读了很多书。大脑就像一块海绵,有些东西仍在试图被理解。我使用ZF主要用于路由,尽管我计划在可能的时候实现它的其他方面。在大多数情况下,这是一个学习过程,所以有些事情我想在没有框架的情况下自己写。

以下是网站的工作方式:URL可以是从"/"(根索引)到"/contact/-根文件,到"/cdeposits/"–子目录"/posits/ira/"-子目录中的一个文件。

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

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

由于节和页可以在任何时候创建,因此必须有控制器可以根据返回的模板数据处理操作。这几乎意味着控制器等将需要一些标准化的名称,这些名称不特定于REQUEST_URI中传递的值。

我该如何在Zend中实现这一点,以便在选择控制器之前发生所有这些,并且只有模板名称才能用于选择正确的控制器?

谢谢,Cy

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

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

  2. routeStartup上的插件中,获取REQUEST_URI并查询数据库。假设该记录包含足够的信息,以便您了解所需的控制器、操作、布局等。

    2.1向控制器和操作添加一个单独的路由(与REQUEST_URI匹配)映射。

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

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

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

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

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

这可能不是性能最好的解决方案,因为_forward()会在调度循环中触发另一次迭代,但它似乎可以工作。

最新更新