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/createし、また/behavior/create。どのページが要求されているかを判断できる必要があります。

カスタムハンドラー(doSelectByDomain)の目的は、を考慮に入れ、domain_slugドメインも正しい場合にのみページを取得/表示することです。ただし、私が見つけたdomain_slugのは、アクションの$requestパラメーターでパラメーターが使用可能であっても、取得するものに織り込むことができるように、カスタムハンドラーにパラメーターを取得する方法がないということです。

モデルから直接オブジェクトにアクセスできることはわかっていsfContextますが、それはせいぜいエレガントではなく、MVCを壊します。本当に良い方法がないのなら、私はそれを使うことを恐れませんが、あるに違いないようです。symfonyはsetListCriteriaルートをリストするためのメソッドを提供していますが、オブジェクトルートに似たものは見つかりません。

ヘルプ?ありがとう。

4

2 に答える 2

3

そのため、ソースコードを少し調べて、必要な場所にたどり着きました。sfPropelRouteはオプションを提供しているようですが、のオプションをmethod_for_criteria尊重し、存在する場合は代わりに使用します。存在する場合のみ、クラスはリクエストパラメータから基準オブジェクトを作成します。methodsfObjectRoutemethod_for_criteriasfPropelRoute

オブジェクトのプロパティではないパラメータが含まれていないことを除いて。その振る舞いについては議論の余地があることは理解していますが、私の意見ではそれは間違いです。

とにかく、短いバージョンでは、methodオプションを使用すると、すべてのパラメーターが配列として指定されたハンドラーに(編集なしで)渡されます。オブジェクトのプロパティ以外のリクエストパラメータが必要な場合は、これが最適な方法のようです。

于 2009-12-19T20:37:47.803 に答える
0

あなたの問題を完全に理解しているかどうかはわかりませんが(SymfonyタグではなくPropelタグについてこれを読んでいます)、アドベントカレンダーの高度なルーティングの章は役に立ちますか?コードはDoctrine用に提供されていますが、Propelにも適応できると思います。

于 2009-12-23T10:47:05.650 に答える