1

Zend Framework を初めて使用するので、データベース データをループしてリンクのリストを生成する最善の方法についてアドバイスをお願いします。私の理解では、モデルにはアプリケーションロジックのほとんどを含め、コントローラーとビューをできるだけ軽量にする必要があります。

データベースにクエリを実行して一連のレコードを取得しています。それらをループして HTML リンクを生成したいと考えています。以下の疑似コード。

コントローラ:

$this->view->myList = MODEL->generateHtml();

モデル:

function generateHtml() {
    query db

    loop through record set

    build a string of html within loop including links

    return string to controller

}

見る:

echo $this->myList;

これはロジックをモデルに入れ、コントローラーのライトとビューをレンダリング専用のままにしているようです。

私が抱えている問題の 1 つは、出力した html でルーティング リンクを生成するために使用したいのです$this->view->urlが、モデルではそれができないことです。私がオンラインで行った読書は、モデルでhtmlを構築するべきではないことを示唆しています。モデルで必要なデータの配列を生成し、それを返し、コントローラーまたはビューでそれをループして html を生成することができますが、正しいアプローチが何であるかについては不明であり、アドバイスをいただければ幸いです。

助けてくれてありがとう。


新しい問題 - 更新されたコード:

こんにちは....以下の提案にうんざりしていますが、今は別の問題があります。

私のコードは次のとおりです。

モデル:

このテストには使用しません。コントローラーで作成された配列と同様の配列を返します。

コントローラ:

    $aStoryList = array( 
        array(
           'headline' => 'Headline 1', 
           'story' => 'Story 1' 
        ), 
        array(
           'headline' => 'Headline 2',
           'story' => 'Story 2'
        )
    );
    $this->view->aStoryList = $aStoryList;

見る:

echo $this->partialLoop('partials/storyList.phtml', $this->aStoryList);

storyList.phtml:

echo "<br />" . $this->headline . $this->story;

このようにパーシャルを配置しました....

ビュー/部分/storyList.phtml

この配置とビューで使用されるパスは、このスタックオーバーフローの質問への回答から派生したものです - Zend Framework の部分 (ビュー) をどこに保存すれば、アプリ内のすべてのビューにアクセスできるようになりますか?

これを実行すると、次のエラーが表示されます

メッセージ: パス (/home/sites/xxxxx.com/public_html/xxxxxxx/application/views/scripts/) にスクリプト 'partials/storyList.phtml' が見つかりません

今、髪を抜いています!

4

1 に答える 1

2

モデルは、データソースからデータをプルするために使用する必要がありますが、HTMLマークアップを生成することはできません。ビューのHTML生成を保存します。コントローラは、モデルとビューの間の接着剤になります。つまり、コントローラーはデータをフェッチし、出力が生成されるビューにデータを渡す作業を行います。

特定のケースでは、PartialLoop View Helperは、ループ内でマークアップを作成するのに役立つはずです。

上記で投稿したものの代わりに、次の擬似コードを提案します。

コントローラ:

$this->view->myList = MODEL->getListOfItems();  // return an array of data

モデル:

function getListOfItems() {
    $results = array(); // array of data to return

    // query db

    // loop over result set
    foreach($result as $row) {
        $results[] = $row;
    }

    return $results;
}

見る:

<?php echo $this->partialLoop('myList.phtml', $this->myList);

myList.phtml部分的に表示:

<tr>
    <td><a href="<?php echo $this->url(array('id' => $this->id))"><?php echo $this->username ?></a></td>
    <td><?php echo $this->firstName ?> <?php echo $this->lastName ?></td>
    <td><?php echo $this->email ?></td>
</tr>

要約する:

  • コントローラーはデータのモデルを照会します
  • モデルは結果の配列を返します
  • コントローラは配列を直接渡して表示します
  • ビューはpartialLoopヘルパーを呼び出し、モデルから配列を渡します
  • partialLoopヘルパーはすべての結果を繰り返し、一度に1つずつ渡しますmyList.phtml(変数スコープがビューパーシャルに対してローカルになる方法に注意してください)。

私の例では、モデルによって返される配列にキー、、、、が含まれていると想定してidいます。usernamefirstNamelastName

お役に立てば幸いです。ご不明な点がございましたら、お気軽にコメントしてください。

于 2012-06-04T20:23:32.427 に答える