プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
FuelPHP1.6、テンプレートコントローラ(Controller_Template)について理解する
FuelPHPではコントローラを作成する際の継承元に「Controller」「Controller_Template」「Controller_Rest」「Controller_Hybrid」が選べるのだそうな。

今回は「Controller_Template」を見ていこうと思います。

まずは駄目元で使ってみますかね。

よいしょっと。
■app/classes/controller/hoget.php
<?php
class Controller_Hoget extends Controller_Template
{
    public function action_index()
    {
        print "action_index";
    }
}

画面表示した結果φ(--)

Error!
Fuel\Core\FuelException [ Error ]: The requested view could not be found: template

COREPATH/classes/view.php @ line 388

383        \Finder::instance()->flash($this->request_paths);
384
385        // locate the view file
386        if (($path = \Finder::search('views', $file, '.'.$this->extension, false, false)) === false)
387        {
388            throw new \FuelException('The requested view could not be found: '.\Fuel::clean_path($file));
389        }
390
391        // Store the file path locally
392        $this->file_name = $path;

ふむ、予想通りなんか怒られた。
調べてみたら「テンプレートがねーよ!」って怒ってるらしい。
特に指定していない場合は「fuel/app/views/template.php」を読もうとするんですってさ。

じゃあとりあえずテンプレートを用意してみますかね。

こらしょっと
■app/views/template.php
<html>
<head>
    <title></title>
</head>
<body>

aaaaaa

</body>
</html>

結果φ(--)

action_index aaaaaa

おぉ、表示された。
なるほど、あらかじめ特定のview(template.php)をレスポンスとして返すように
設定されたコントローラが「Controller_Template」って奴なのね。

「テンプレート」ってくらいだから変数も使えるらしい。

よいしょっと
■app/views/template.php
<html>
<head>
    <title></title>
</head>
<body>
    <?php echo $msg ?>
</body>
</html>

こらしょっと
■app/classes/controller/hoget.php
<?php
class Controller_Hoget extends Controller_Template
{
    public function action_index()
    {
        print "action_index";
        $this->template->msg = 'ほげほげ';
    }
}

結果φ(--)

action_index 

あれ?変数に値が設定されない?!Σ(´・д・`)

あれやこやと調べて解決φ(--)

action_index ほげほげ

before()とかafter()って使えるんだべか(--?

よいしょっと
■app/classes/controller/hoget.php
<?php
class Controller_Hoget extends Controller_Template
{
    public function before()
    {
        print "before";
    }


    public function action_index()
    {
        print "action_index";
        $this->template->msg = 'ほげほげ';
    }

    public function after($response)
    {
        print "after";
    }

}

結果φ(--)

Warning!
Fuel\Core\PhpErrorException [ Warning ]: Attempt to assign property of non-object

APPPATH/classes/controller/hoget.php @ line 12

 7    }
 8
 9    public function action_index()
10    {
11        print "action_index";
12        $this->template->msg = 'ほげほげ';
13    }
14
15    public function after($response)
16    {
17        print "after";

なんか怒られた。
調べたらController_Template内のbefore()、after()で何かやっているので
呼んであげなくちゃいけないらしい。

こらしょっと
■app/classes/controller/hoget.php
<?php
class Controller_Hoget extends Controller_Template
{
    public function before()
    {
        parent::before();
        print "before";
    }

    public function action_index()
    {
        print "action_index";
        $this->template->msg = 'ほげほげ';
    }

    public function after($response)
    {
        print "after";
        return parent::after($response);
    }
}

結果φ(--)

beforeaction_indexafter ほげほげ

コントローラ毎にテンプレート変えられるの(--?

public $templateをクラス内(メソッド外)で定義すれば良いらしい。

よいしょっと
■app/classes/controller/hoget.php
<?php
class Controller_Hoget extends Controller_Template
{

    public $template = 'template_hoge';

    public function action_index()
    {
        print "action_index";
        $this->template->msg = 'ほげほげ';
    }
}

こらしょっと
■app/views/template_hoge.php
<html>
<head>
    <title></title>
</head>
<body>
template_hoge<br />
    <?php echo $msg ?>
</body>
</html>

結果φ(--)

action_index template_hoge
ほげほげ

なるほどねー。

まとめると

1.Controller_Templateはあらかじめ用意されたテンプレートを返却するコントローラ。

2.テンプレート内の変数にコントローラ側から値を設定することが可能。
  「$this->template->xxx = "hoge";」の形で設定できる

3.クラス変数「$template」に指定することで使用するテンプレートを変更可能。
  「public $template = 'xxx';」の形で設定できる

4.before()、after()を使いたい場合は親クラスの該当メソッドも呼ぶ
  「parent::before();」「return parent::after($response);」を記述

ってな感じですね。
普通のコントローラを使えばいーんじゃね?と思わなくもないですが横着したい人向けなのでしょう。

長々と書いちゃったけど、取りあえず完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:FuelPHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事