将Params传递给Symfony路线

时间:2009-12-28 13:48:40

标签: php symfony1

我有一个显示动态页面的已定义路线:

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

这很好用,但现在我希望我的主页URI路由到特定页面。为此,我假设我必须将要显示的页面的:domain_slug:slug值作为主页传递。这没关系,但我似乎无法找到任何文档或示例,告诉我如何去做。

是否可以在路线中指定特定的变量值?在这种情况下,我想传递:domain_slug => portal, :slug => dashboard(该语法不起作用,顺便说一句)。基本上,我想创建一个看起来像这样的主页路线:

homepage:
  url:   /
  class: sfPropelRoute
  param: { module: page, action: show, array( :domain_slug => portal, :slug => dashboard ) }
  options:
    model: Page
    type: object
    method: doSelectByDomain

但足够不同,你知道,它有效。 :-)我想我可以创建一个到不同方法的简单路由,手动修改请求参数并转发到executeShow()方法,但如果有更优雅的解决方案,那么我宁愿避免这种方法。 / p>

感谢。

3 个答案:

答案 0 :(得分:3)

您可以在路线的param键中定义值...例如:

homepage:
  url:   /
  class: sfPropelRoute
  param: { module: page, action: show, domain_slug: portal, slug: dashboard}
  options:
    model: Page
    type: object
    method: doSelectByDomain

至少这就是它如何与非推进/学说路线一起工作。我认为它应该与框架中的任何类型的路由相同。

答案 1 :(得分:0)

我从来没有找到一种方法来做到这一点(或者我可能无法正确地做到这一点)。我的解决方案是创建路由并通过自定义方法传递它,该方法执行工作以指定适当的页面详细信息:

homepage:
  url:   /
  class: sfPropelRoute
  options:
    model: Page
    type: object
    method: doSelectHomepage
  param: { module: page, action: show ) }
  requirements:
    sf_method: [get]

doSelectHomepage()方法完成了我希望通过对路径中的值进行硬编码而能够完成的所有工作。

答案 2 :(得分:0)

实际上它确实有效,它只是路线定义的顺序。第一个答案是正确的。如果您在“page_show”规则之前添加“主页”规则,它可能对您有用。也许Symfony并不像我想的那样愚蠢......不,不,它是。这不是那么糟糕。