ビューモデル
ビューモデルはオプションです。必要ない場合は、ビュー を使用することができます。
ビューモデルとは?
ビューモデルはビューの生成に必要なロジックを含むクラスです。 コントローラがユーザ入力を処理し、必要なアクションを処理すると、 ビューモデルにビューに必要なデータを取得するように処理を引き継ぎます。 ビューモデルはデータの操作を一切すべきではありませんが、データベースの呼び出しや他のデータの取得、 ビューの生成に必要な準備の操作を含めます。
ビューモデルの作成
最初は app/classes/view/index.php
で、空のビューモデルを作成します:
class View_Index extends ViewModel {}
そして、app/views/index.php
でこれが属するビューを作成します:
<h1><?php echo $title; ?></h1>
<ul>
<?php
foreach ($articles as $a)
{
echo '<li>'.$a->title.'</li>';
}
?>
</ul>
ビューの名前
ビューモデルとそのビューは同じ名前を共有します。
ビューモデル View_Index
のビューは app/views/index.php
になります。
アンダースコアはクラスと同じように、つまり、ビュー View_Some_Thing
は、
app/views/some/thing.php
になります。
このデフォルトの動作は、そのビューを使うビューモデルの中で、静的でない $_view
プロパティを設定することで、
オーバーライトできます。
最後に、ビューモデルをコントローラから呼び出します:
ViewModel::forge('index');
これですべてを設定しました; しかし、まだデータがビューに渡されていません。
$title
の文字列と $articles
の配列を渡す必要があります。
ビューモデルにこのデータを与える view()
メソッドを追加します:
class View_Index extends ViewModel
{
public function view()
{
$this->title = 'Testing this ViewModel thing';
$this->articles = Model_Articles::find('all');
}
}
これで完了です。
関数をビューに渡す
ビューモデルから、特定の関数をビューに渡すには、クロージャ を使用します。
// ビューモデルの中
class View_Index extends ViewModel
{
public function view()
{
$this->echo_upper = function($string) { echo strtoupper($string); };
}
}
// ビューの中で使える:
$echo_upper('this string'); // 出力: "THIS STRING"