menu
書いてる野郎
orebike@gmail.com
FuelPHP 1.7
コントローラーは
sample1/fuel/app/classes/controller
のディレクトリ以下に実装する。
今回 hoge controller を実装するとすると、ファイルは
sample1/fuel/app/classes/controller/hoge.php
となる。
もしクラス名が2単語からなる名前だったとすると・・・コーディング標準 - 概要 - FuelPHP ドキュメントによると、キャメルケースを使えというように取れるが、ファイル名は全部小文字にしろという規約もある。
私の場合は思考停止して単に繋ぐことにした。「hoge piyo コントローラー」は、hogepiyo.php
である。ということでそんな複雑な名前つけるようなクラス作るなよと頭においておく。
クラスは
class Controller_Hoge extends Controller { }
のように Controller_
をクラス名にくっつけて Controller
クラスを継承して作る。
この場合も複数単語からなるクラス名の場合は私はくっつけてしまう。 「hoge piyo コントローラ」なら Controller_Hogepiyo
である。
実際にURLから呼び出されて動くメソッドを作るには
public function action_index() { return Response::forge(View::forge('hoge/index')); }
のように Actionメソッド名に action_
をつけたものを作る。
action_index
は特別でAction メソッド名が省略して呼び出された時に呼び出されるメソッドとなる。
逆に action_
を付けなければ、外部から隠蔽されてURLから呼び出すことができないことになる。
リクエストの GET のみ、リクエストの POST のみに処理を限定したい場合がある。そのようば場合、action_
の代わりに get_
, post_
を使うことで外部からのアクセスできるメソッドが限定される。
これを利用するとGETとPOSTで同名のURLで違う挙動を実装するのが容易になる。よりRESTな実装ができるということだな。
通常はURLの設計を厳密に行うと思うので action_
は使わずに全部 get_
, post_
でやったほうがいいと思う。
Action メソッドの戻り値は
Response::forge(View::forge('hoge/index'));
等のメソッドで生成される、Response
オブジェクトを返す必要がある。想像するにこれは表示する内容を示すものと、そのメタ情報を詰め込んだものだろう。
↑の場合はView::forge
メソッドで実際に表示する値を生成して、それを Response
に乗っけている。
メタ情報をデフォルトのモノでOKならば
View::forge('hoge/index');
このようにViewでのレンダリング結果をそのまま返してもよい。
単なる文字列を返すと、単なる文字列がそのままブラウザにリターンされる。
外部からパラメータを受け取るには簡単な方法として
public function action_piyo($aaa, $bbb, $ccc)
のようにする。
http://aaaaaa.com/hoge/piyo/111/222/333
のようなURLでアクセスするとそれが
$aaa = 111; $bbb = 222; $ccc = 333;
のようにマッピングされる。RESTっぽいね
でも実際問題はパラメータはそんなに簡単で少ないわけないのでいろいろこれでは機能的に不足する部分も多くなると思う
http://aaaaaa.com/hoge/piyo?aaa=111&bbb=222&ccc=333
のようなURLで来た場合に
Inputクラスから
$aaa = Input::get("aaa"); $bbb = Input::get("bbb"); $ccc = Input::get("ccc");
のように取り出すことができる。
同様にPOSTで来たメソッドは
$aaa = Input::post("aaa"); $bbb = Input::post("bbb"); $ccc = Input::post("ccc");
で取り出せる
基本的には View::forge
の第二引数に連想配列を渡せばよい
View::forge('hoge/index', array("hoge" => "ほげ", "piyo" => "ぴよ"));
という具合。
View側からは
<?php echo $hoge; >
な感じで使える
さらにサブディレクトリを切ってコントローラーを格納することもできる つまり
sample1/fuel/app/classes/controller/sub123
みたいなディレクトリにもコントローラを格納できる
今回 hoge controller を実装するとすると、ファイルは
sample1/fuel/app/classes/controller/sub123/hoge.php
となる。
これに対応して hoge.php に実装するクラス名は
class Controller_Sub123_Hoge extends Controller { }
となる
class Controller_Hoge extends Controller { public function action_index() { return Response::forge(View::forge('hoge/index')); } public function action_piyo() { return Response::forge(ViewModel::forge('hoge/piyo')); } public function action_404() { return Response::forge(ViewModel::forge('hoge/404'), 404); } }