将标准注入sfPropelRoute对象

时间:2009-12-18 18:04:54

标签: php symfony1 propel

我有一个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/create/behavior/create。我需要能够确定请求的页面。

自定义处理程序(doSelectByDomain)的目的是考虑domain_slug,并且只有在其域也正确的情况下才检索/显示页面。但是,我发现,即使动作的domain_slug参数中有$request参数,我也无法将其添加到我的自定义处理程序中,因此可以将其考虑在内。检索。

我意识到我可以直接从我的模型中访问sfContext对象,但这样做不够优雅并打破了MVC。如果没有更好的方法,我不会害怕使用它,但似乎必须有。 Symfony为列表路由提供setListCriteria方法,但我找不到任何类似的对象路由。

帮助?感谢。

2 个答案:

答案 0 :(得分:3)

所以通过源代码进行一些冒险让我得到了我需要的地方。似乎sfPropelRoute提供method_for_criteria选项,但尊重method的{​​{1}}选项,如果存在,则使用它。如果仅存在sfObjectRoute,则method_for_criteria类将根据请求参数创建条件对象。

除了它不包含任何不属于对象属性的参数。我理解这个行为有一个参数,但在我看来这是一个错误。< / p>

无论如何,简短版本是如果你使用sfPropelRoute选项,所有参数都作为数组传递给没有编辑到指定的处理程序。如果您需要的参数属于对象属性以外的请求参数,那么这似乎就是您的选择。

答案 1 :(得分:0)

我不确定我是否完全理解你的问题(我读的是Propel标签,而不是Symfony标签),但任何帮助都是来自Advent Calendar的Advanced Routing章节吗?代码是为Doctrine提供的,但我猜你也可以将它改编为Propel。