2

私は「ブログプレビュー」のテンプレートを持っています。これは基本的に、リスト内で繰り返すために構築された簡潔な構造のブログのサムネイル、タイトル、および短い抜粋です。

上で示唆したように、私は自分のサイトのトップ10のブログを、モデルのDBからプルし、それらをコントローラーに転送します。コントローラーは、ビューに関してそれらを提供します。ビューでは、結果をループして、ブログごとに新しい「ブログプレビュー」を入力する必要があります。

私の現在の解決策(MVCのルールに違反する可能性があると思います)は、ビューテンプレートでこれを行うことです:

foreach($this->blogs as $blog) {
    $tpl = new Output_Html();
    $tpl->title = $blog['title'];
    // ...assign other vars

    $tpl->render();
}

どういうわけか、これはビューが許可されるべきではない何かのように感じますか?しかし、メインページテンプレート内の「プレビュー」テンプレートを他にどのようにループできるでしょうか。

ヘルプ?

4

3 に答える 3

2

ビューが出力の生成を担当していることを考えると、ここで行っていることは問題ないようです。ビューで「計算/ビジネス/そのようなこと」を行っていません。

私が抱えている唯一の問題は、ここに大量のコードを書いていることです。$blogビューの各プロパティをビューに割り当てるのではなく、配列/オブジェクトをビュー全体に渡し、ビューにそれを処理させたいと思い$blogます。


つまり、次のように見えます (単なるアイデアです。これが View クラスにどのように適合するかは、あなた次第です)

foreach($this->blogs as $blog) {
    $tpl = new Output_Html();
    $tpl->blog = $blog;
    $tpl->render();
}

これは、blogオブジェクトが変更された場合に、編集する(追加または削除する)ビューが 1 つしかなく、そのビューへの各呼び出しを変更して 1 つのコンポーネント/プロパティを追加/削除する必要がないことを意味します$blog

于 2010-01-13T23:22:42.303 に答える
1

コントローラの責任は、入力を処理し、モデルを特定の状態に設定することです。ビューの責任は、モデルをレンダリングすることです。だから、これは大丈夫だと思います。これは、部分ビューをレンダリングしたり、ViewHelperを使用したりするようなものです。View Helperは、動的なビジネスデータのプレゼンテーションロジックをカプセル化します。

于 2010-01-13T23:05:02.570 に答える
0

私はパスカルに同意します。コントローラーでその操作を実行する代わりに、単にそれをビューに渡し、そこで残りの作業を行います。コントローラーに入力を取り込ませ、モデルを介して前処理し、ビュー用にすべてを準備します。そうすれば、コードの保守性を確保できます。

于 2010-01-14T01:50:33.360 に答える