FuelPHPのコントローラ

MVC
Figure 1. MVC

リクエストURLに基づいて呼び出すコントローラとメソッドが決定される。コントローラは、URLを通じてアクセス可能なクラスである。リクエストを処理することができる。

itref.fc2web.com/php/indexというURLがリクエストされた場合、1番目のセグメント(php)は呼び出されるコントローラで、2番目のセグメント(index)は、呼び出されるコントローラのメソッドである。

FuelPHPでは、コントローラはAPPPATH/classes/controllerディレクトリに配置する。クラス名にはController_というププリフィックスを付ける。また、Controllerクラスを拡張する必要がある。

上記URLの場合、コントローラのクラス名はController_Phpとなる。URLを通じてリクエストされたメソッドは、action_というプリフィックスを付ける。上記URLの場合、Controller_Phpクラスのaction_indexというメソッド名となる。

GET及びPOSTのHTTPリクエストを処理するメソッドのプリフィックスは、それぞれget_post_となる。

APPPATH/classes/controller/php/fuelphp.phpのように、サブディレクトリにコントローラを配置することもできる。この場合、Controller_Php_Fuelphpというクラス名にする必要がある。

Controllerクラスのメソッド

メソッド説明
beforeアクションメソッドを実行する前に呼び出されるメソッド。各アクションメソッド共通の前処理を記述する場合にオーバライドする。
afterアクションメソッドを実行した後に呼び出されるメソッド。各アクションメソッド共通の後処理を記述する場合にオーバライドする。
paramsすべての名前付きパラメータを返す。

beforeメソッド

beforeメソッドは、コントローラがURLで指定されたメソッドを実行する前に呼び出される。したがって、各メソッドに共通する事前処理を記述することができる。

class Controller_Example extends Controller {
public function before() {
  // code
}

テンプレートコントローラでbeforeメソッドを使う場合、parent::beforeメソッドを追加しなければならない。そうしないと、$this->templateが使えない。

class Controller_Example extends Controller_Template {
public function before() {
  parent::before();
  // code
}

アクションメソッド

アクションメソッドはResponseオブジェクトを返すようにする。ただし、Viewオブジェクトを返すこともできる。アクションメソッドが戻り値としてViewオブジェクトを返した場合、Controller::after()メソッドがResponseオブジェクトを返す。

public function action_index() {
return Response::forge(View::forge('index'));
}

Restコントローラ

Restコントローラは、Baseコントローラを継承したもので、RESTfulのサポートが組み込まれている。Restコントローラを使用するには、Controller_Restクラスを継承したクラスを作成し、クラス名にController_という接頭辞を付ける。

HTTP GETで呼び出すメソッドはget_、HTTP PUTで呼び出すメソッドはput_という接頭辞をメソッド名に付ける。

Restコントローラの使用例を次に示す。

class Controller_Example extends Controller_Rest {
  public function get_foo() {
    return $this->response(
      array(
        'foo' => 'bar',
        'baz' => 'qux'
      )
    );
  }
}

上記コントローラのgetメソッドはを呼び出す際、取得するデータ形式を拡張子で指定する。たとえば、JSON形式でデータを取得するには、次のようなURLで呼び出す。

http://localhost/fuelphp/example/foo.json

XML形式でデータを取得するには、次のようなURLで呼び出す。

http://localhost/fuelphp/example/foo.xml