我有一个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
方法,但我找不到任何类似的对象路由。
帮助?感谢。
答案 0 :(得分:3)
所以通过源代码进行一些冒险让我得到了我需要的地方。似乎sfPropelRoute
提供method_for_criteria
选项,但尊重method
的{{1}}选项,如果存在,则使用它。如果仅存在sfObjectRoute
,则method_for_criteria
类将根据请求参数创建条件对象。
除了它不包含任何不属于对象属性的参数。我理解这个行为有一个参数,但在我看来这是一个错误。< / p>
无论如何,简短版本是如果你使用sfPropelRoute
选项,所有参数都作为数组传递给没有编辑到指定的处理程序。如果您需要的参数属于对象属性以外的请求参数,那么这似乎就是您的选择。
答案 1 :(得分:0)
我不确定我是否完全理解你的问题(我读的是Propel标签,而不是Symfony标签),但任何帮助都是来自Advent Calendar的Advanced Routing章节吗?代码是为Doctrine提供的,但我猜你也可以将它改编为Propel。