テンプレート(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;