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

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

この「Controller_Hybrid」は「Controller_Template」の特徴と「Controller_Rest」の特徴を
両方持っているコントローラなのだそうな。
なるほど、だから「ハイブリッド」なのね

Controller_Templateのようにテンプレートを使うこともできるしφ(--)

■app/classes/controller/hogeh.php
<?php
class Controller_Hogeh extends Controller_Hybrid
{
    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>

Controller_RestのようにGET/POSTで振り分けたりφ(--)

■app/classes/controller/hogeh.php
<?php
class Controller_Hogeh extends Controller_Hybrid
{
    public function get_hoge()
    {
        $this->response(
            array(
                'aaa' => array(
                    1, 2, 3
                ),
                'bbb' => array(
                    "A", "B", "C"
                )
            )
        );
    }

    public function post_hoge()
    {
        print "post_hoge";
    }
}

返却形式を指定したりできるのだそうなφ(--)

http://localhost/fuelphp-1.6/public/hogeh/hoge.xml

なるほどなるほど(--)

「get_hoge()」「post_hoge()」の中でもテンプレートは使えているのだろうか?φ(--)

■app/classes/controller/hogeh.php
<?php
class Controller_Hogeh extends Controller_Hybrid
{
    public $template = 'template_hoge';

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

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


結果φ(--)

get_hoge template_hoge
ほげほげ

おぉ、使えた。

じゃあこの状態で拡張子を指定してアクセスしたらどうなるんだろ?

http://localhost/fuelphp-1.6/public/hogeh/hoge.xml

結果φ(--)

get_hoge template_hoge
ほげほげ

ありゃ、同じだ。
無理やりXMLにはしてくれないのですね。

……(--)

混ぜたらどーなる?φ(--)

■app/classes/controller/hogeh.php
<?php
class Controller_Hogeh extends Controller_Hybrid
{
    public $template = 'template_hoge';

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

    public function get_hoge()
    {
        print "get_hoge";

        $this->response(
            array(
                'aaa' => array(
                    1, 2, 3
                ),
                'bbb' => array(
                    "A", "B", "C"
                )
            )
        );


        $this->template->msg = 'ほげほげ';
    }
}

http://localhost/fuelphp-1.6/public/hogeh/hoge.xml

結果φ(--)

get_hoge<?xml version="1.0" encoding="utf-8"?>
<xml><aaa><item>1</item><item>2</item><item>3</item></aaa><bbb><item>A</item><item>B</item><item>C</item></bbb></xml>

今度はXMLになるのですね。

なるほど、分からん。

仕方ないので

fuel/core/classes/controller/hybrid.php

の中身を覗いてみることに。

結果分かったことφ(--)

1.「Controller_Hybrid」の継承元は「Controller_Rest」
2.Ajaxからのアクセス(「is_ajax();」の判定がtrue)のときは「Controller_Rest」扱い
3.URLからのアクセス(「is_ajax();」の判定がfalse)でテンプレートがあればロードされる
4.「$response」「$this->response->body」がNULLだったらテンプレート適用

ふむふむ、なるほど(--)

まとめると

1.Ajaxからのアクセスは「Controller_Rest」扱い
2.「$response」「$this->response->body」に何か設定したら「Controller_Rest」扱い
3.それ以外は「Controller_Template」扱い

になるってことですね。

「Controller_Template」と「Controller_Rest」両方の特徴を持っているというより
条件によって継承元が変わるとイメージした方が分かりやすいと思います。

この条件のときはController_Templateを継承したように振る舞いますよ~
この条件のときはController_Restを継承したような動きですよ~
ってな感じですね。

Controller_TemplateとController_Restを理解していれば、
Controller_Hybridも怖くないと思います。

どの条件でどう振る舞うかが変わるだけですよ。

完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

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

  関連記事