0

while ループを表示する関数の内容の表示について質問があります。

これが私のモデル内の関数です:

function get_results($id)
{
    $stmt = "select * where ... "
    $stmt = $this->BEAR->Database->query($stmt);

    $result = '';

    while($row = mysqli_fetch_array($stmt))
    {
        $result .= '<div>';
        $result .= $row['name'];
        $result .= '</div>';
    }

    $this->BEAR->Template->setData('loop', $result, FALSE);
}

これは私のコントローラーです:

    $BEAR->Webprofile->get_results(Template->getData('id'));

そして、これは私の見解です:

<?php echo $this->getData('loop');?>

これにより、問題なくビュー内にループが表示されます。しかし、私が望んでいるのは、モデル内に HTMl を持たないことです。とにかくこれを行うことはありますか (これにより、モデルに大量の HTML が発生する可能性があるため)。おそらく、モデル内でデータを設定し、ビュー内でデータを取得する方法です。

次のように個別にループしながら、モデル関数内で設定しようとしました:

 while($row = mysqli_fetch_array($stmt))
    {
       $this->BEAR->Template->setData('name', $row['name']);
       $this->BEAR->Template->setData('name', $row['age']);
    }

次に、コントローラーで関数を呼び出し、各 setData を呼び出しますが、これはコンテンツの完全な while ループではなく、最初の結果のみを表示しました。

したがって、while ループのすべてのコンテンツを (HTML を使用して) ビューに表示したいのですが、関数はデータを取得して設定するだけにしたいと考えています。これはできますか?ご意見やご指導をいただければ幸いです。

4

2 に答える 2

0

MVC に規律を適用する必要があります。モデルは生データを返す必要があります。オブジェクトまたはデータの配列のみを返す必要があります。重要なのは一貫性です。

HTML フォーマットを追加するには、ビューにすべてのコードを含める必要があります。div または順序付けられたリストを吐き出す、作成したモデル関数を単に呼び出すビューがあると、ビューの概念全体が役に立たなくなります。ビューはすべての HTML コードを提供する必要があります。

PHP を使用しているため、HTML に簡単にドロップインおよびドロップアウトできます。

モデルで次のようなものから始めます。

function get_results($id)
{
    $stmt = "select * where ... "
    $stmt = $this->BEAR->Database->query($stmt);

    $results = array();

    while($row = mysqli_fetch_array($stmt))
    {
        $results[] = $row['name'];       
    }
    return results; 
}

そこから、コントローラーがこの関数を呼び出し、 $results をレンダリング用の特定のビュー ファイルと共にビュー/テンプレートに渡す必要があることを理解できるはずです。

于 2013-01-23T21:11:42.347 に答える
0
function get_results($id)
{
    $stmt = "select * where ... "
    $stmt = $this->BEAR->Database->query($stmt);

    $result = '';
    $result = mysqli_fetch_array($stmt);
    return $result;
}

次に、コントローラーで:

 $this->BEAR->Template->setData('loop', $model->get_results($id), FALSE);

次に、テンプレートで

foreach($rows as $row){
     ....do something with each row
}

モデルからデータを取得してテンプレートに渡す方法の完全な例

class MyController {
    function controller_showResults(){
        $model = new Model();
        $results = $model->get_results($_GET['id']);
        $this->BEAR->Template->setData('loop', $results, FALSE);
    }
}

テンプレート内の setData の最初の引数がビューに渡される変数であり、その変数が $results であると仮定したビュー

<?php foreach($loop as $l): ?>
    <div><?php echo $l['name'] ?></div>
<?php endforeach; ?>
于 2013-01-23T21:13:39.547 に答える