テンプレート(View)を使ったhello, world![kohana 3.x]

「コントローラーを作成[kohana 3.x]」でhello, world!と出力するコントローラを 作成しましたが、ここではテンプレート(View)を使ったhello, world!を作成します。

Viewを使うにはいくつかの方法がありますが、Controller_Templateクラスを継承する方法で作成してみます。

テンプレートの作成

applicationディレクトリにviewsディレクトリを作成しtemplate.phpを作成します。
(例:public_html/ko3/application/views/template.php)

サイト全体に共通する部分を作成し、コンテンツ等を差し替えるようにします。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<title><?php echo Html::Chars($title) ?></title>
</head>
<body>
<?php echo $content ?>
</body>
</html>

コントローラーの作成

Controller_Templateクラスを継承してController_Websiteクラスを作成します。
(application/classes/controller/website.php)

<?php defined('SYSPATH') OR die('No Direct Script Access');

Class Controller_Website extends Controller_Template
{

    function action_index()
    {
        $this->template->title = 'Sample kohana 3.x';
        $this->template->content = 'hello, world!';
    }
}

以上でテンプレート(View)を使った hello, world! の完成です。

継承元Controller_Template

継承元であるController_Templateの実体は、system/classes/kohana/controllerディレクトリのtemplate.phpです。

Controller_Websiteクラスで参照したtemplateは、継承元に定義されています。

public $template = 'template';

public function before()
{
    if ($this->auto_render === TRUE)
    {
        // Load the template
        $this->template = View::factory($this->template);
    }
}

beforeメソッドでViewのインスタンスが生成され、requestオブジェクトのresponseプロパティへセットされます。

public function after()
{
    if ($this->auto_render === TRUE)
    {
        $this->request->response = $this->template;
    }
}

最終的にbootstrap.phpのechoによって出力されます。

echo Request::instance()
    ->execute()
    ->send_headers()
    ->response;