プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
FuelPHP1.6、コントローラのアクションメソッド「get_ほげ」「post_ほげ」について理解する
FuelPHPのコントローラ「Controller_Rest」はGET/POSTで
呼び出すアクションメソッドを切り替えることができます。

例えばこんな感じですねφ(--)

■app/classes/controller/hoger.php
<?php
class Controller_Hoger extends Controller_Rest
{
    public function get_hoge()
    {
        print "get_hoge";
    }

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

GETアクセスの結果φ(--)

get_hoge

POSTアクセスの結果φ(--)

post_hoge

「Controller_Hybrid」も多分大丈夫でしょう。
「Controller_Rest」の特徴を持っていますからね。

こんなコードでφ(--)

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

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

    public function post_hoge()
    {
        $this->template->msg = 'post_hoge';
    }
}

GETアクセスの結果がこれでφ(--)

template_hoge
get_hoge 

POSTアクセスの結果がこれですφ(--)

template_hoge
post_hoge 

ここまではOKですね。

本題はここから(--)b

「Controller」「Controller_Template」はどうなの?

ってのが今回のテーマです。

まずは「Controller_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 = 'ほげほげ';
    }

    public function get_hoge()
    {
        $this->template->msg = 'get_hoge2';
    }

    public function post_hoge()
    {
        $this->template->msg = 'post_hoge2';
    }
}

GETアクセスの結果がこれでφ(--)

template_hoge
get_hoge2

POSTアクセスの結果がこれですφ(--)

template_hoge
post_hoge2

……あれ?
get_hoge()、post_hoge()両方とも認識されてんじゃん。

じゃ、じゃあ「Controller」は?φ(--;)

■app/classes/controller/hoge.php
<?php
class Controller_Hoge extends Controller
{
    public function get_hoge()
    {
        print "get_hoge3";
    }

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


GETアクセスの結果がこれでφ(--;)

get_hoge3

POSTアクセスの結果がこれですφ(--;)

post_hoge3

あれ?全部GET/POSTの振り分けできるじゃん。

困ったときは中を見てみるのが一番です。
中を追いやすいってのはfuelPHPさんの良いところですね。

早速

fuel/core/classes/controller.php

の中を見てみると

    public function router($resource, $arguments)
    {
        // If they call user, go to $this->post_user();
        $controller_method = strtolower(\Input::method()) . '_' . $resource;

        // Fall back to action_ if no HTTP request method based method exists
        if ( ! method_exists($this, $controller_method))
        {
            $controller_method = 'action_'.$resource;
        }


        // If method is not available, throw an HttpNotFound Exception
        if (method_exists($this, $controller_method))
        {
            return call_user_func_array(array($this, $controller_method), $arguments);
        }
        else
        {
            throw new \HttpNotFoundException();
        }
    }

の記述がありました。

よく分からんけど

        $controller_method = strtolower(\Input::method()) . '_' . $resource;

        // Fall back to action_ if no HTTP request method based method exists
        if ( ! method_exists($this, $controller_method))
        {
            $controller_method = 'action_'.$resource;
        }

が怪しい。

いやゴメン。謙遜しました。よく分かります。

要はHTTPリクエストのmethodをプレフィックスにつけたメソッドの有無をチェックして
なければ「action_」で始まるメソッドを呼び出そうとするってことですよね?

この記述は「controller.php」内にあるので、別に「Controller_Rest」じゃなくても
POST/GETで呼び出すアクションメソッドを変更できるようです。

結論(--)b

どのコントローラでもmethodによって呼び出すアクションメソッドは振り分けられる。

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

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

  関連記事