ビュー(+Template)を使ったhello, world![FuelPHP 1.7]

「FuelPHPでHello World」でhello, world!と出力するコントローラを 作成しましたが、ここではビューを使ったhello, world!を作成します。

ビューを使う方法はいくつかありますが、Controller_Templateクラスを継承する方法で作成します。

テンプレートと呼ばれる、外枠のHTMLを作成し中身を置き換えるように作成します。

テンプレートの作成

app/viewsディレクトリにtemplate.phpを作成します。

サイト全体に共通する部分を作成し、コンテンツ部分等を置き換える(変数)ようにします。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title><?php echo $title ?></title>
</head>
<body>
<?php echo $content ?>
</body>
</html>

コントローラーの作成

Viewを簡単に使うにはController_Templateクラスを継承してコントローラを作成します。

app/classes/controller/website.phpを次のように作成します。

class Controller_Website extends Controller_Template
{

    function action_index()
    {
        $this->template->title = 'Sample FuelPHP 1.7';
        $this->template->content = 'hello, world!';
    }
}

以上でテンプレート(View)を使った hello, world! の完成です。kohanaとかなり似ていますね。

継承元Controller_Template

上記例では、作成したtemplate.phpが使われている場所がありません。

継承元であるController_Templateは次のように作成されており、デフォルトで「template.php」 ファイルを使用するように設計されています。

abstract class Controller_Template extends \Controller
{

    public $template = 'template';

    public function before()
    {
        if ( ! empty($this->template) and is_string($this->template))
        {
            $this->template = \View::forge($this->template);
        }
        return parent::before();
    }

    public function after($response)
    {
        if ($response === null)
        {
            $response = $this->template;
        }
        return parent::after($response);
    }
}

ざっくり読んでみると、beforeメソッドでtemplate.phpがロードされ、 デフォルトのテンプレートとして出力されています。