3

次のように、関連するモデル(ymlの外部関係で指定)から選択リストが入力されたUserFormクラスがあります。

$this->setWidget('report_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Report'))));

このリレーションからのレポートオブジェクトをレポートフィールドの1つ、「アクティブ」でフィルタリングして、active=1のレポートのみがフォームに表示されるようにします。

適切なクエリを実行し、フィルタリングされたレポートを返すメソッドReportTable :: GetActiveReports()があります。したがって、1つのオプションは、ウィジェットにその関数の結果を入力することです。それを行うための構文に関するヒントはありますか?

よりクリーンな方法は、UserFormFilterクラスを使用して、そこでactive=1でレポートをフィルタリングすることです。残念ながら、フォームフィルターの使用方法(または実際にはそれらが何であるか)に関するドキュメントが見つからなかったため、これは適切な解決策ではない可能性があります。フォームフィルターはこの仕事に適したツールですか?http://www.doctrine-project.org/api/orm/1.2/doctrine/doctrine_record_filter_standard.htmlで定義されているように、Doctrine_Record_Filter_Standardクラスを使用する必要がある ようですが、適切な使用法はわかりません。

どんなガイダンスも役に立ちます。ありがとう!ダン

4

1 に答える 1

1

それを行う最も簡単な方法は、既存のコードを維持することですが、少し調整するだけです。

モデルで、必要なレコードのクエリオブジェクトを返すだけで、execute()'を実行しないメソッドを実装します。基本的に、メソッドで作成しているクエリオブジェクトGetActiveReports()(このメソッドをリファクタリングして新しいメソッドを使用できます)。

次に、フォームクラスで:

$queryObject = Doctrine::getTable("Report")->GetActiveReportsQuery();
$this->setWidget('report_id',
  new sfWidgetFormDoctrineChoice(array(
    'model' => $this->getRelatedModelName('Report'),
    'query' => $queryObject)
  )
);

次に、ウィジェットは指定されたクエリオブジェクトを使用して、適切にフィルタリングされたレコードを取得する必要があります。

于 2010-05-30T12:20:32.527 に答える