0

我有一个Page对象,其唯一性来自它的PageDomain. 架构配置为使page表包含一个page_domain_id用于创建关系的字段。为了显示一个页面,我有一个executeShow动作和一个自定义处理程序。我的路线如下所示:

page_show:
  url:     /:domain_slug/:slug
  class:   sfPropelRoute
  options:
    model: Page
    type:  object
    method_for_criteria: doSelectByDomain
param:   { module: page, action: show }
requirements:
  sf_method: [get]

举个例子,我可能有/audience/createand /behavior/create。我需要能够确定正在请求哪个页面。

自定义处理程序 ( doSelectByDomain) 的目的是考虑domain_slug并仅在其域也是正确的情况下检索/显示页面。但是,我发现,即使domain_slug在操作的$request参数中提供了一个参数,我也无法将其传递给我的自定义处理程序,以便将其考虑到检索的内容中。

我意识到我可以sfContext直接从我的模型中访问该对象,但这充其量是不雅的,并且会破坏 MVC。如果真的没有更好的方法,我不害怕使用它,但似乎必须有。Symfony 提供了setListCriteria一种列出路由的方法,但我找不到任何类似的对象路由。

帮助?谢谢。

4

2 回答 2

3

因此,对源代码的一点冒险让我到达了我需要的地方。似乎sfPropelRoute提供了该method_for_criteria选项,但尊重该method选项sfObjectRoute并在它存在的情况下使用它。如果仅method_for_criteria存在,则sfPropelRoute该类从请求参数创建一个标准对象。

除了它不包含任何不是对象属性的参数。我知道这种行为是有争议的,但在我看来这是一个错误。

无论如何,简短的版本是,如果您使用该method选项,所有参数都将作为数组传递(无需编辑)到指定的处理程序。如果您需要请求参数而不是对象的属性,这似乎是要走的路。

于 2009-12-19T20:37:47.803 回答
0

我不确定我是否完全理解您的问题(我是为 Propel 标签而不是 Symfony 标签阅读的),但是 Advent Calendar 中的Advanced Routing章节是否有帮助?该代码是为 Doctrine 提供的,但我想您也可以将其改编为 Propel。

于 2009-12-23T10:47:05.650 回答