Mach3.laBlog

はじめてのKohana (5) : ビュー

この記事は賞味期限切れです。(更新から1年が経過しています)

「はじめてのKohana」の第五回目です。 今回は、Kohanaのビューについて紹介します。

はじめてのKohana

ビューファイル

Kohanaのビューファイルはこちらに格納する決まりになっています。

/application/views/

例えば、単純に文字列を表示するだけの「hello」というコントローラー・ビューを作ってみるとします。

/application/views/hello.php

これがhelloビューの格納場所になります。 内容は適当に。

<!DOCTYPE HTML>
<html lang="ja">
<head>
     <meta charset="UTF-8">
     <title>Hello</title>
</head>
<body>

     Hello !!

</body>
</html>

では、このビューファイルをhelloコントローラーで出力してみます。

class Controller_Hello extends Controller {
    public function action_index(){
        $view = View::factory("hello"); // Viewクラスでインスタンスを生成
        $this->response->body($view); // 生成したインスタンスをResponseで出力
    }
}

View::factory( $name ) で名前に応じたビューファイルからインスタンスを作る事ができます。 ビューの出力は、基本的にこのインスタンスを使って制御する事になります。

この例では、”hello” という名前から /application/views/hello.php を元にしたビューのインスタンスを生成しています。

ビューに値を渡す(set)

実際の運用では、ビューファイルに値を渡して、それにより値を表示させたり切り替えたりすると思います。 ビューに値を渡すには、ビューインスタンスのsetメソッドを利用します。

$view = View::factory("hello");
$view->set("name", "John"); // set( $key, $value );

上記の形以外にも、連想配列で引数を渡したり、プロパティの追加でも値を設定する事ができます。

// 下の3つは全て同じ処理
$view->set("name", "John");
$view->set( aray("name" => "John") );
$view->name = "John";

setされた値は、ビューファイル側でキーの名前の変数にて参照できます。

Hello, <?php echo $name; ?> !!

値を参照渡しする(bind)

setは値渡しですが、bindメソッドを使えば参照渡しをする事も出来ます。

$foo = "bar";

$view = View::factory("hello");
$view->bind("foo", $foo);
$this->response->body($view);

$foo = "piyo";

(ビューファイルでの結果)

echo $foo; // <= "piyo"

setを使った場合は、上の出力結果は”bar”になります。

共用の値を設定する

複数のビュー・アクションで共通の値を利用したい場合は、set_global または bind_global を使用します。 beforeメソッド等で値を設定しておけば、そのコントローラー内の全てのアクションのビューでその値を参照できます。

set_global と bind_global の違いは set / bind と同様に、値渡しをするか、参照渡しをするかの違いです。

public function before(){
    View::set_global("title", "HELLO PAGE");
}
public function action_index(){
    $view = View::factory("hello");
    $this->response->body($view);
}

(ビューファイルでの結果)

echo $title; // <= "HELLO PAGE"

ビューの中のビュー

ウィジェット等の出力でよく使われると思いますが、 ビューの中にビューを展開する為の方法として、公式のドキュメントでは幾つかのアプローチが提案されています。 状況と目的に応じて使い分けるとよいでしょう。

ビューの中でインスタンスを生成する

基本的にそのインスタンスでset/bindした値しか使えません。

<?php 
    echo View::factory("widget")->bind("foo", $foo); 
?>

ビューの中でincludeする

より原始的な方法です。 特徴としては、親のビューのコンテキストで展開されるので、 親のビューで使用できる全ての値が子のビューでも使用できます。

<?php 
    include Kohana::find_file("views", "widget");
?>

コントローラ内で、子のビューを親のビューにアサインする

親となるビューに、子のビューのインスタンスを生成して渡します。 コントローラで表示を操れるのが特徴です。

$view = View::factory("layout");
$view->widget = View::factory("widget")->set("foo", $foo);
$this->response->body($view);

cf) Views | Kohana User Guide

まとめ

Kohanaのビューについてご紹介しました。 次回は、アプリの核となるデータベースとモデルの話をします。


» もくじ

  1. Hello World !
  2. コントローラとビューの基本
  3. コントローラ
  4. ルーティング
  5. ビュー
  6. モデルとデータベース
  7. バリデーション

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*