リクエスト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
というクラス名にする必要がある。
メソッド | 説明 |
---|---|
before | アクションメソッドを実行する前に呼び出されるメソッド。各アクションメソッド共通の前処理を記述する場合にオーバライドする。 |
after | アクションメソッドを実行した後に呼び出されるメソッド。各アクションメソッド共通の後処理を記述する場合にオーバライドする。 |
params | すべての名前付きパラメータを返す。 |
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コントローラは、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