【问题标题】:Different url scheme for Zend FrameworkZend 框架的不同 url 方案
【发布时间】:2010-03-28 16:22:49
【问题描述】:

对于我们的 CMS,我们有一个站点管理器来定义站点的树结构(如果您想这样称呼它,站点地图)。

一个可能的 url 是 www.example.com/our-team/developers/chris/,它将在树结构中映射到节点 chris,开发人员的子节点又是 out-team 的子节点。

所有这一切都已经到位并且可以正常工作,这要归功于在学说中出色实施的嵌套集行为。唯一的事情是我正在努力让它在我们网站的前端工作。默认情况下,Zend 框架的请求对象需要 controller/action/key/value/key/value/... URI 方案,但这不太符合我的需要,我想跳过整个控制器、操作和键部分并限制为价值观。类似于 value1/value2/value3/value4/...

有人知道如何做到这一点吗?

编辑:更多背景: 您可能想知道我如何将请求映射到控制器/操作?好吧,每个不可调度的请求(因此不是现有的控制器/动作)都由错误控制器处理,在那里我将请求 URI 与树结构中的路径匹配,从而能够显示页面(如果路径匹配),如果不匹配,错误控制器将继续并响应 404。

【问题讨论】:

  • 在哪里定义显示“chris”页面时要调用哪个动作?
  • 好吧,实际上这是通过错误控制器处理的,对于每个不可调度的请求,都会调用错误控制器,我会检查路径是否与树结构中的路径匹配,如果匹配,我会调度pagesController,否则就让错误控制器继续

标签: php zend-framework request


【解决方案1】:

我通过扩展Zend_Controller_Router_Route_Abstract 类完成了路由。

通过将其添加到路由器堆栈,可以使用包含许多路由的“瀑布”系统。

我在我的博客上published the code,它按照 Bittarman 的建议工作。

【讨论】:

    【解决方案2】:

    该用例映射到与标准模式类似的controller/action/value。定义自定义路由时,请使用 :controller/:action/:username 之类的内容。

    请参阅 ZF 手册中的Using a Router

    【讨论】:

    • 这是我知道的,是的,这实际上是我想规避的。实际上,我想要的只是能够从我的 PagesController 中的 URI 中获取每个单独的部分......类似于 $this->_request->getParamNr(5) 的东西,无论实际密钥如何,它都会为我获取 URI 的第 5 部分或与该部分 uri 关联的值
    • 我猜这个编号的方法会起作用,直到你达到一定程度的重建网址(/our-team/developers/chris 变成 /our-team/chris ),希望控制器中的代码更具可读性($this->getParam(5) vs $this->getParam('userId'),或者希望通过允许它们具有相同的名称来将 url 与模型相关联(UserModel 可以在 UserController 中使用)。可能还有更多原因。
    • 如果您仍然想要编号的 url,您应该能够在控制器中使用 $this->getRequest()->getParams() 的编号索引,但是您仍然需要使用一些重写(并且在 ErrorController 中捕获所有内容是失去可维护性的好方法,因为它没有意义。)
    【解决方案3】:

    首先,我将停止使用错误控制器来提供路由。那只是简单的坏juju。

    现在在处理这样的路由结构时需要考虑一些事项,其中之一是这与默认路由冲突,因此如果您依赖它,则需要严格执行此操作。

    鉴于您在此处提供的信息,我建议您将路由类子类化,并对您的数据库执行(缓存)查找,并从那里返回正确的模块/控制器/操作,然后直接找到正确的首先行动。

    然后,您还可以在请求参数(页面内容、团队成员详细信息等)中传递相关数据,以便在您的操作中不需要进一步的 db 查找,并且您的操作代码(如果没有查找内容)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多